【问题标题】:Sending email through PHP mail function not working for long emails通过 PHP 邮件功能发送电子邮件不适用于长电子邮件
【发布时间】:2013-02-11 20:35:13
【问题描述】:

我正在尝试使用 php 邮件功能从我的站点发送电子邮件。网站上的用户以 html 形式键入他们的电子邮件。我已经测试了邮件功能,它适用于电子邮件文本较小的情况,例如:

this is an email 

但是,当我输入长电子邮件时,mail() 函数返回 1 但实际上没有收到电子邮件。发送电子邮件的代码很简单:

$email_message = $_POST['email_mssg_from_form'];
$ret = mail($to, $subject, $email_message);

我尝试使用以下方法规范 $email_message 的内容:

$email_message = wordwrap($email_message, 70, "\r\n");      
$email_message = addslashes($email_message);

但这没有帮助。我不确定如何处理引号和长行。通常当用户在表单上键入电子邮件时,会有连续的文本行,只有段落会被\r\n分隔

【问题讨论】:

  • $email_messaage 包含POST 变量的值,但您使用$email_message 发送到mail() 函数。这是正确的还是错字?
  • 检查你的邮件服务器日志然后阅读这个 -:codinghorror.com/blog/2010/04/… 有很多可能性要排除
  • 但是当邮件消息不长且不复杂时,服务器正在发送电子邮件。所以我处理 $email_message 字符串的方式有问题。
  • 你怎么知道消息虽然长又复杂,但没有发送?接收客户端可能出于垃圾邮件的原因阻止它。我明白为什么,如果你添加了 lorem ipsum 短语,一些其他的单词组合会重复自己:)
  • 来自邮件服务器的 1 仅表示它已被本地邮件服务器接受,与投递或任何其他邮件服务器对电子邮件的响应无关

标签: php


【解决方案1】:

我遇到过类似的问题,即消息的长度导致不一致。这就是我的诀窍:

使用此行使用 base64 对整个消息进行编码:

$email_message = chunk_split(base64_encode($email_message));

然后,在邮件中添加一个标头,将其附加到您的标头中:

$headers = "Content-Transfer-Encoding: base64\r\n\r\n";

这将告诉邮件客户端您的邮件是 base64 编码的。

您必须修改对 mail() 函数的调用,如下所示:

mail($to, $subject, $email_message, $headers);

【讨论】:

  • 我试过这个,但它对我的长电子邮件不起作用。
猜你喜欢
  • 2012-02-04
  • 2014-05-23
  • 2020-03-26
  • 2012-12-12
  • 1970-01-01
  • 2013-08-16
  • 2023-03-10
  • 2014-08-17
相关资源
最近更新 更多