通过sendgrid发送的纯文本电子邮件中的额外换行符

时间:2011-06-08 08:35:23

标签: codeigniter phpmailer sendgrid

我们使用CodeIgniter(v1.7)和PHPMailer(v5.1)以纯文本形式发送电子邮件。当前的生产设置使用便宜的SMTP中继,计划是切换到CritSend或SendGrid。我们现在正在从Rackspace Cloud服务器测试选项。

当我们使用SendGrid SMTP时,emial中的所有“\ r \ n”换行符最终都会加倍,所以最终会以“\ r \ n \ r \ n”结束。

使用CritSend SMTP和其他两个SMTP服务器时,一切正常。

SendGrid技术支持不认为它与他们的系统有任何关系,但听说过另一个客户端有同样的问题,显然它已经通过客户端的配置更改得到解决。

有人经历过这个吗?

这对我们来说并不重要,因为CritSend运行良好,并且在功能上看起来和SendGrid一样好,所以我们将继续使用它们。但作为一个好奇的类型,我不能放过这个: - )

常用设置:PHP脚本 - > sendmail / Postfix - >外部SMTP中继 - > ....

要测试不同的SMTP中继,我更改后缀配置,只有SendGrid提供额外的换行符,所有其他SMTP选项都可以正常工作。如果我通过CodeIgniter电子邮件类调试功能转储电子邮件,它在进入后缀之前看起来很好。

备用设置:PHP脚本(CI邮件类或PHPMialer) - >外部SMTP中继 - > ....

要测试不同的SMTP中继,我更改了CI电子邮件配置或PHPMialer配置中的SMTP设置。只有SendGrid提供额外的换行符,所有其他SMTP选项才能正常工作。

据我所知,并没有很多选择可以使用。我试过“utf-8”和“ISO-something or other”,我们这边的所有换行都是“\ r \ n”......看起来像是某个非常模糊的错误。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

好的,更多的实验和这些设置使纯文本电子邮件从PHPMailer很好地通过SendGrid:

    $mailer->CharSet    = "utf-8";
    $mailer->LE         = "\r\n";
    $mailer->Encoding   = "quoted-printable";
    $mailer->WordWrap   = 80;

“引用可打印”部分是关键。

答案 1 :(得分:1)

对我有用的是在PHP文本中使用实际的换行符,如下所示:

    // Prepare email
    $email = array(
        'api_user'  => App::emailAPIUser(),
        'api_key'   => App::emailAPIPwd(),
        'to'        => $email,
        'subject'   => 'Thank you for entering ' . App::name(),
        'html'      => $email_body,
        'text'      => '

Thank you for entering Competition. 

You are now in the running to WIN your prices valued at $6000. 

Winners will be notified of their status by the 14th February 2012. 

Good luck!',
        'from'      => 'competitions@company.com'
    );