通过SendGrid服务发送电子邮件的简单PHP类

8
我正在尝试将SendGrid事务邮件服务与我的网站上的PHP脚本集成。对于我的目的,我只需要能够从我的网站上的“联系我们”页面发送单个文本电子邮件。就这样!所以我找到了这个PHP库,但是它有太多的“东西”。我不想在不知道里面发生什么的情况下上传1.7 MB的PHP代码到我的服务器。因此,我很好奇是否有一个简单的PHP实现,使用sockets连接到SendGrid服务器来执行以下操作?
  1. 向短收件人列表发送单个纯文本电子邮件。

  2. 获取结果:成功/失败等。

4个回答

13

我使用了PHPmailer,它非常好用。

    $mail=new PHPMailer();
    $mail->IsSMTP();    
    $mail->Port = 587;
    $mail->SMTPAuth = true;               
    //sendgrid
    $mail->Username="apikey";
    $mail->Password = $api;   //api key from sendgrid
    $mail->Host="smtp.sendgrid.net";
    $mail->SMTPSecure = 'tls';   
    $mail->From = $from;
    $mail->FromName = 'From name';
    $mail->AddAddress($to);  // Add a recipient
    $mail->MsgHTML($sbody);
    $mail->isHTML(true);
    $mail->Body    = $sbody;
    $mail->Subject = $subject;
    if(!$mail->Send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
    exit;
  }

    $mail->ClearAddresses();
    $mail->ClearAttachments();
    

谢谢。我会让其他人投票,看它是否有效。我放弃了SendGrid并选择了SendinBlue。(请参见我的答案。) - c00000fd
它不接受用户名和密码。它显示SMTP:ERROR->服务器拒绝密码:535。 - Ankit Singh

1

虽然它不完全回答了我的原始问题,但是它回答了这个问题:"用于发送电子邮件的简单PHP类"

我花了一整天时间尝试让SendGrid PHP示例在我的服务器上工作。也许我是老派的,但是我没有为现有代码使用Composer,而且SendGrid示例没有运行所需的Composer。此外,我不想调整我的现有PHP代码库以适应他们的类,也不想去调试他们的类来提取有效部分。(被Mandrill抛弃已经让我头痛不已,我不想再为此增加麻烦。)

然后我在SendGrid社区论坛上发布了一个问题......却什么都没得到。

我向他们的技术支持提交了一个工单......但没有收到任何回复。(到今天为止。)

所以我的解决方案是继续寻找。那时我发现这篇评论关于交易邮件服务,并首先尝试了Amazon SES(但设置非常麻烦,所以我没有选择它。这里有一个不错的YouTube视频,展示了安装过程有多么复杂)。

然后我尝试了SendInBlue,并且非常喜欢它的易用性。他们的PHP类用于发送邮件是仅一个.php文件,大小为22KB。没有composer,也没有其他依赖项。它可以在不给我任何麻烦的情况下工作。传递能力也非常好。我能够在15分钟内设置一个开箱即用的帐户(经过所有必要的验证等)。对于新帐户可以发送多少封电子邮件有一些限制,但是在您联系他们的技术支持(或者自己建立)之后,他们将取消其中一些限制。因此,我的测试电子邮件能够毫无问题地到达Hotmail,Outlook,GMail服务器。它直接进入收件箱。我甚至不需要设置SPF和DKIM记录。默认情况下,您发送的电子邮件使用SendinBlue签名。稍后,在我联系他们的技术支持并收到及时回复和说明后,我设置了自己的SPF和DKIM记录。

我对SendinBlue在我的需求(即少量的交易邮件)方面非常印象深刻。即使是他们的免费账户也能很好地工作,而且只需8美元/月,您就可以提高一些发送配额。
SendinBlue是一家法国公司,因此可能不会受到目前在美国发生的某些法律/政治问题的影响。他们也没有像SendGrid或Mandrill/Mailchimp那样变得如此庞大,因此他们还没有像这两个公司那样变得“自负”。所以,SendinBlue,让我们保持这种方式!
免责声明:我与上述任何服务都没有关联。

1

PHPMailer 也可以与 Sendgrid 网络服务一起正常使用 - @bob_1982 的示例是正确的。但是,如果您正在使用 PHP 5.6+ 版本,则可能会有问题。自此版本起,PHP 流设置 SSL peer verify 从默认值 FALSE 更改为默认值 TRUE,这在 Sendgrid 特别是出现了错误 Failed verifying SSL certificate。以下是应遵循的 PHPMailer SMTP 流设置以解决此问题:

$phpMailer->SMTPOptions = [
    'ssl' => [
        'verify_peer' => false,
        'verify_peer_name' => false,
    ],
];

然而,禁用对等验证绝对不是一个好建议,因为这样做会影响安全性。服务提供商应该修复问题,而不是采用这种解决方法。请参阅与SwiftMailer相关的问题 - https://github.com/swiftmailer/swiftmailer/issues/544


-1

您需要拥有SendGrid PHP帮助库:
https://github.com/sendgrid/sendgrid-php
然后您应该按照GitHub页面上的说明进行操作。

编辑
抱歉,我错过了您提到的内容。您不需要上传1.7 MB。它只是几个类。


抱歉,我以为他提供了其他应用程序,因为这个应用程序不需要1.7 MB,而是需要上传几个文件。 - bemol
1
谢谢你们两位。我不知道它是否有效,因为我放弃了SendGrid。他们的客户服务和脚本示例太差了!请阅读我的答案以获取详细信息。 - c00000fd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接