【问题标题】:Send mail using send grid api key使用 sendgrid api 键发送邮件
【发布时间】:2015-10-06 09:44:01
【问题描述】:

我正在使用发送网格发送邮件。 这是我使用的脚本。

$url = 'https://api.sendgrid.com/';
$params = array(
    'api_user'  => 'xxx',   // My send grid username
    'api_key'   => xxx',   // My send grid password
    'to'        => tomail,     
    'subject'   => 'sub',
    'html'      => 'message',
    'from'      => frommail,
);

$request =  $url.'api/mail.send.json';
$session = curl_init($request);
curl_setopt ($session, CURLOPT_POST, true);
curl_setopt ($session, CURLOPT_POSTFIELDS, $params);
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($session);
curl_close($session);

一切正常,邮件发送成功。

我不想在不使用密码的情况下使用发送网格 API 密钥发送邮件。 我从 'app.sendgrid.com/settings/api_keys' 生成它,得到 api 密钥 id 和长密钥。

如何从 web api 调用中使用此密钥。我正在用新生成的api key namekey 替换api_userapi_keys,但邮件没有发送。

【问题讨论】:

  • 我建议使用这个github.com/sendgrid/sendgrid-php。您可以使用composer 轻松安装它,向下滚动到“使用”部分,您将找到如何使用 api 密钥进行实例化。
  • 它使用的是send php库,我没有使用这个。我只使用 curl。
  • 好的,那为什么不使用这个库——它看起来确实比所有那些原始 curl 函数更容易使用。
  • 另外请注意,Sendgrid 可以作为常规的 SMTP 邮件服务,常用的邮件库 phpMailer 或 Swiftmailer 也可以正常使用。

标签: php curl sendgrid


【解决方案1】:

我今天也遇到了这个问题。要添加到@bwest 提供的答案:

$pass = 'your api token' // not the key, but the token

$url = 'https://api.sendgrid.com/';

//remove the user and password params - no longer needed
$params = array(
    'to'        => tomail,     
    'subject'   => 'sub',
    'html'      => 'message',
    'from'      => frommail,
);

$request =  $url.'api/mail.send.json';
$headr = array();
// set authorization header
$headr[] = 'Authorization: Bearer '.$pass;

$session = curl_init($request);
curl_setopt ($session, CURLOPT_POST, true);
curl_setopt ($session, CURLOPT_POSTFIELDS, $params);
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);

// add authorization header
curl_setopt($session, CURLOPT_HTTPHEADER,$headr);

$response = curl_exec($session);
curl_close($session);

【讨论】:

    【解决方案2】:

    要使用 API 密钥发送,您需要在请求中添加 Authorization 标头。它是一个 HTTP Basic auth 标头,这意味着它采用username:password 格式,base64 编码,作为不记名令牌。您可以在文档中see an example

    【讨论】:

      【解决方案3】:

      我使用 Send Grid php 库,我可以在其中使用用户名和密码或仅使用 API 密钥。

      尝试删除 api_user 行并将 api 密钥与 api_key 一起使用。它应该可以工作。

      欲了解更多信息:https://sendgrid.com/docs/Integrate/Code_Examples/php.html

      【讨论】:

      • 试过了,但没有收到邮件到我的收件箱/垃圾邮件。
      • 检查是否有任何重叠变量。例如,我有 2 个 $EMAIL 集(1 个用于电子邮件地址,另一个用于 sendgrid)
      【解决方案4】:

      使用带有 Autorization: Bearer key 标头的 API 密钥有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-30
        • 1970-01-01
        • 2016-09-01
        相关资源
        最近更新 更多