PHPMailer发送邮件时没有主题和换行符。

3
我使用php的curl()函数从服务器A连接到邮件服务器B发送邮件。
$body = "body\n\nmore body\nmore body\n\nmore body\n\n";


$post = [
    'sendera' => $sender,
    'sender_name' => $sender_name,
    'subject'   => $subject,
    'body'   => $body,
    'recipient'   => $email,
    'recipient_name' => $name,
    'replyto' => $replyto
];

$ch = curl_init('http://example-mailserver.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 10);
$response = curl_exec($ch);
curl_close($ch);

邮件发送成功但出现了两个问题。
问题1:
邮件没有换行,所以所有的 \n 都变成了普通文本。之前从同一台服务器发送邮件从未遇到过这个问题。现在使用 curl() 发送时出现了这个问题。邮件服务器已经安装了 php7。这是 php7 还是 curl() 的问题?
问题2:
邮件没有主题,但是 $subject 变量在脚本运行时存在,我通过在调用 PHPMailer() 函数之前发送了一封简单的邮件来检查这一点。
那么,为什么 PHPMailer 忽略了 $subject?在安装有 php5 的 A 服务器上从未遇到过这个问题。
mail('my@email', 'check if subject exists', $subject);

上面的邮件是通过 $subject 变量发送的。但是使用 PHPMailer 发送的邮件没有主题行。
$mail=new PHPMailer();
$mail->IsMail();
$mail->WordWrap   = 0; 
$mail->SingleTo = true;
$mail->IsHTML(false);
$mail->CharSet    = "utf-8";

$mail->From       = $sender;
$mail->FromName   = $sender_name;
$mail->Subject    = $subject;
$mail->Body       = $body;

$mail->AddAddress($recipient,$recipient_name);
$mail->AddReplyTo(#replyt,"No-Reply");

$mail->Subject = "".$subjects.""; // 请尝试这个 - Ivan Barayev
同样的问题 :( - user1406271
你试过使用 <br> 吗? - Fevly Pallar
2个回答

1

问题一可能是由于您使用的换行符引起的。 \n 是完整换行的两个元素之一,它是“新行”。 一些邮件系统/服务器期望完整的换行,即 \r\n,在这种情况下,\r 是完整换行的第二个元素,它是“回车符”。

问题二...首先:您的$subject中有什么?


1
$subject 是:确认密码重置请求。 - user1406271
\r\n并没有帮助,问题依旧 - 纯文本 - user1406271
有时在使用重音符号“áéíóú”或特殊字符如“ñ”时会出现失败的情况。这取决于机器、配置和php配置。 - Wiliam
@Wiliam,你是如何解决这个问题的? - FourBars

0

主题问题

我安装了最新版本的phpmailer,但是现在没有主题。

换行符

我在单引号中使用了$body

body = 'this is body\r\n\r\nmore body';

我将它改为:
$body = "this is body\r\n\r\nmore body";

现在一切都好了。

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