【问题标题】:Simple PHP class to send email via SendGrid service通过 SendGrid 服务发送电子邮件的简单 PHP 类
【发布时间】:2016-04-23 22:50:22
【问题描述】:

我正在尝试将SendGrid 事务性电子邮件服务与我网站上的 PHP 脚本集成。出于我的目的,我需要它做的就是能够从我网站上的“联系”页面发送一封基于文本的电子邮件。就是这样!

所以我找到了this PHP library,不幸的是其中有太多“东西”。我不想在不知道发生了什么的情况下将 1.7 MB 的 PHP 代码上传到我的服务器。

所以我很好奇,有没有简单的 PHP 实现,idk,使用sockets 连接到 SendGrid 服务器来执行以下操作?

  1. 向一个简短的收件人列表发送一封纯文本电子邮件。

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

【问题讨论】:

    标签: php email sendgrid


    【解决方案1】:

    我使用了 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。 (见我自己的答案。)
    • 不接受用户名和密码。它说 SMTP: ERROR -> 服务器不接受密码。 : 535
    【解决方案2】:

    这不完全是我最初问题的答案,但它是问题的答案,"Simple PHP class to send email"

    我花了 一天 试图使 SendGrid PHP 示例适用于我的服务器。我可能是个老派,但我没有将Composer 用于我现有的代码,如果没有它,SendGrid 示例将无法运行。最重要的是,我不想调整我现有的 PHP 代码库以使用他们的类,或者去调试他们的类以提取工作部分。 (我已经被 Mandrill 甩了足够的头痛来增加它。)

    然后我在 SendGrid 社区论坛上发布了一个问题……但什么也没收到。

    我向他们的技术支持提交了一张票...但什么也没收到。 (直到今天。)

    所以我的解决方案是继续寻找。那时我发现了this review 的事务性电子邮件服务,并第一次尝试了 Amazon SES(在设置 a%# 时非常痛苦,所以我没有使用它。这里有一个很好的YouTube video,它将显示只是一个设置是多么复杂。)

    然后我尝试了SendInBlue,并且非常喜欢它的易用性。他们发送事务性电子邮件的 PHP 类是 just one .php 文件,大小为 22 KB。没有composer,没有其他依赖项。它没有让我头疼。可交付性也很好。我能够在 15 分钟内设置一个开箱即用的帐户(经过所有必要的验证等)。对一个新帐户可以发送多少封电子邮件有一些限制,但是在你联系他们之后技术支持(或建立自己,我猜)他们会采取一些措施。所以我的测试电子邮件能够毫无问题地到达 Hotmail、Outlook、GMail 服务器。它直接进入收件箱。我什至不必设置 SPF 和 DKIM 记录。默认情况下,您发送的电子邮件使用 SendinBlue 签名。后来我联系了他们的技术支持并收到了带有说明的及时回复后,我设置了自己的 SPF 和 DKIM 记录。

    因此,我对 SendinBlue 的需求(即少量交易电子邮件)印象深刻。即使是他们的免费帐户似乎也非常好用,然后每月只需 8 美元。您可以取消他们的一些发送配额。

    SendinBlue 是一家法国公司,因此它可能不会受到目前在美国发生的一些法律/政治错误的影响。它们也没有 SendGrid 或 Mandrill/Mailchimp 大,所以它们还没有像这两个一样长出“大脑袋”。所以,SendinBlue,让我们保持这种状态!

    免责声明:我不隶属于我上面提到的任何服务。

    【讨论】:

      【解决方案3】:

      PHPMailer 也适用于 Sendgrid Web 服务 - @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

      【讨论】:

        【解决方案4】:

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

        编辑
        对不起,我错过了你提出来。您无需上传 1.7 MB。这是几个类

        【讨论】:

        • 哦抱歉,我还以为他提供了其他应用程序,因为这个应用程序不需要1.7 MB,要上传几个文件。
        • 谢谢你们。我不知道它是否有效,因为我放弃了 SendGrid。他们的客户服务和脚本样本很糟糕!有关详细信息,请阅读我自己的答案。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多