13

我在这个 PHP 电子邮件函数的结果中随机出现感叹号。我读到这是因为我的行太长,或者我必须用 Base64 对电子邮件进行编码,但我不知道该怎么做。

这就是我所拥有的:

$to = "you@you.you";
$subject = "Pulling Hair Out";
$from = "me@me.me";
$headers = "From:" . $from;
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
$headers .= "Content-Transfer-Encoding: 64bit\r\n";

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

我该如何解决这个问题,所以没有随机!结果呢?谢谢!

4

4 回答 4

15

如此处所述:HTML 电子邮件中的感叹号

问题是你的字符串太长了。将一个长度超过 78 个字符的 HTML 字符串输入到 mail 函数,你会得到一个 ! (砰)在你的弦上。

这是由于 RFC2822 https://www.rfc-editor.org/rfc/rfc2822#section-2.1.1中的行长度限制

于 2013-08-23T17:54:05.763 回答
10

尝试使用这段代码:

$to = "you@you.you";
$subject = "Pulling Hair Out";
$from = "me@me.me";
$headers = "From:" . $from;
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
$headers .= "Content-Transfer-Encoding: 64bit\r\n";

$finalMessage = wordwrap( $message, 75, "\n" );

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

问题是一行不应超过 998 个字符。(另见https://stackoverflow.com/a/12840338/2136148

于 2014-12-08T16:41:06.050 回答
3

这里的答案有关于行长的正确信息,但是没有一个为我提供了足够的代码片段来解决这个问题。我环顾四周,找到了最好的方法,就是这样;

<?php
// send base64 encoded email to allow large strings that will not get broken up
// ==============================================
$eol = "\r\n";
// a random hash will be necessary to send mixed content
$separator = md5(time());

$headers  = "MIME-Version: 1.0".$eol;
$headers .= "From: Me <info@example.com>".$eol;
$headers .= "Content-Type: multipart/alternative; boundary=\"$separator\"".$eol;
$headers .= "--$separator".$eol;
$headers .= "Content-Type: text/html; charset=utf-8".$eol;
$headers .= "Content-Transfer-Encoding: base64".$eol.$eol;

// message body
$body = rtrim(chunk_split(base64_encode($html)));

mail($email, $subject, $body, $headers);
// ==============================================
于 2015-12-24T09:40:40.517 回答
2

你是对的,那是因为你的电子邮件太长了。尝试在您的邮件标题中替换此行。

Content-Transfer-Encoding: quoted-printable
于 2013-08-23T17:54:18.500 回答