Неверные учетные данные при отправке почты с помощью sendgrid

Это код для отправки электронной почты с помощью sendgrid. У меня есть правильный ключ api, но браузер отображает ошибку как

HTTP / 1.1 401 Неавторизованный сервер: nginx Дата: Чт, 14 июл 2016 08:14:32 GMT Content-Type: application / json Content-Length: 88 Connection: keep-alive {"errors": [{"message": " Permission denied, неправильные учетные данные "," field ": null," help ": null}]}

<?php require '/sendgrid-php/vendor/autoload.php'; if(require("sendgrid-php/vendor/autoload.php")) {echo "path found";} sendemail('kanwararyan2@gmail.com','SEndgrid','kanwararyan1@gmail.com','HI'); function sendemail($f,$s,$t,$m){ $from = new SendGrid\Email(null, $f); $subject = $s; $to = new SendGrid\Email(null, $t); $content = new SendGrid\Content("text/plain", $m); $mail = new SendGrid\Mail($from, $subject, $to, $content); $apiKey = getenv('Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); $sg = new \SendGrid($apiKey); $response = $sg->client->mail()->send()->post($mail); echo $response->statusCode(); echo $response->headers(); echo $response->body(); } ?> 

Related of "Неверные учетные данные при отправке почты с помощью sendgrid"

Похоже, вы не установили переменную окружения с помощью ключа api, с которым вы пытаетесь использовать:

 $apiKey = getenv(...); 

Пожалуйста, проверьте документацию здесь, так как похоже, что вы используете пример кода.

Просто для теста вы можете использовать:

 $apiKey = 'add here your api key'; 

заменяя использование getenv. Он должен работать. Затем вы можете установить ключ api в файле конфигурации или в виде переменной env (в зависимости от вашего приложения), чтобы не перекодировать его в скрипт.

У меня была одна и та же проблема, удалив getenv () и жесткое кодирование ключа API в разрешенной проблеме.

Почему SendGrid решил, что было бы неплохо включить его в примерный код на своем веб-сайте; не указывая на то, что вам нужно сделать больше, чем просто использовать образец кода, я не уверен.

Просто «ПРИМЕЧАНИЕ: вам также нужно установить переменные среды в X-местоположении», было бы достаточно.

В любом случае, все работает и сейчас … спасибо!

По-видимому, документация не такая ясная, как должна быть.

Короткий ответ:

У меня был такой же точный вопрос. Вот ответ, который я получил, и я действительно смог реализовать код, отображаемый в документации. В основном вам нужно использовать стороннюю утилиту, которая анализирует файлы .env и делает данные доступными для вашей рабочей среды PHP.

Из документации утилиты я узнал, что переменные окружения обычно предназначены только для целей разработки, и этот производственный код обычно содержит жесткие кодировки реальных данных (секретов). Весь файл .env (в этом случае sendgrid.env и getenv('YOUR_API_KEY') , так что вам не обязательно обязательно делиться важными данными при обмене кодом, например, на Github, поэтому добавление файла .gitignore в .gitignore Читайте оригинальный ответ для полной истории и как получить getenv() !

Ударяет мой разум, почему они не будут включать такие важные данные в readme.md, но его довольно перепутали, и многие люди застряли. Может быть, я отправлю вопрос, когда найду время, но никаких обещаний.

Зайдите на .readme .readme для большей ясности! : D

Длительный ответ:

Если вы не используете общий код (т. Е. Это ваш личный проект или ваш клиент не заботится о секретах обмена), вам не нужно устанавливать переменные среды. Удалите строки getenv из вашего кода и введите код жесткого кода.

Однако, если вы сотрудничаете тогда, в идеале , вам следует выяснить способ не включать конфиденциальную информацию в код, который вы используете. В примере Sendgrid они используют функцию getenv PHP для извлечения конфиденциальных данных, но на самом деле не показывают, как хранить эти данные, чтобы они были доступны в вашей рабочей среде PHP. Помимо мини-намеков, таких как добавление файла sendgrid.env в .gitignore (сообщение о том, что файл sendgrid.env не будет загружен в репозиторий git), есть много информации о том, как сделать содержимое sendgrid.env ( который хранит вашу api_key, доступную для вашей рабочей среды PHP. Следовательно, каждый раз, когда вы запускаете свой код, PHP обычно не сможет увидеть ваш ключ.

Тем не менее, более глубокий поиск в их git-репозитории, и вы видите более подробный пример, где они используют утилиту PHP dotenv , цель которой – обходить .env-файлы и разрешать PHP анализировать информацию из этих файлов.

Поэтому, чтобы получить getenv('YOUR_API_KEY') ) для работы, вам нужно либо использовать утилиту dotenv либо, как мне сказали менеджер сообщества SendGrid, « самостоятельно выяснить, как безопасно хранить переменные среды и сделать их доступными к среде PHP ".

Попробуйте использовать этот ключ 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

API Key id zVrH6X0zQxW7nqu5rxcoUw его дает deniel.

Для тех, кто все еще борется с этим, вы можете удалить функцию env () из упаковки вашего ключа.

 $apiKey = '' 

Это будет нормально в разработке, но для производства обратитесь к этому разделу в документации по сетке отправки:

Переменные среды установки

Обновите среду разработки с помощью SENDGRID_API_KEY, например:

 echo "export SENDGRID_API_KEY='YOUR_API_KEY'" > sendgrid.env echo "sendgrid.env" >> .gitignore source ./sendgrid.env 

Для меня после создания API в SendGrid они отображают API TOKEN и сообщают вам, что они только показывают его один раз по соображениям безопасности и сохраняют его в некотором безопасном месте. Этот API TOKEN сильно отличается от API-ключа, в котором предлагается пример кода. Это то, что мне нужно было использовать в переменной $ apiKey без getenv (..). Надеюсь, это поможет кому-то еще быстрее добраться до него …