当前位置: 首页 > 知识库问答 >
问题:

PHPMailer允许mime边界可见

沈枫涟
2023-03-14

我使用PHPMailer通过smtp-relay.gmail.com发送电子邮件-见上一篇文章通过G-Suite建立帐户后,我的凭据被接受,但是当电子邮件发送时,我可以看到纯文本版本,以及html版本,一路上还有一些其他角色:

    ------example.com----250cd4bbb8be52d828379181e485c269 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Order Received

...

 ------example.com----250cd4bbb8be52d828379181e485c269 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit

然后是html版本,以以下内容结尾:

------example.com----250cd4bbb8be52d828379181e485c269-- 

当我使用香草版本时,它工作得很好,没有看到纯文本或哑剧边界数据:

$send = mail($recpEmails, $subject, $htmlMessage, $headers);

变量$htmlMessage仍然保存与以前相同的信息,但现在PHPMailer通过以下行发送它:

$mail->Body = $htmlMessage;

我不会看到纯文本或这些带有破折号的其他行。为什么通过PHPMailer发送

是因为我加了下面一行吗?

$mail->IsHTML(true);

是由于以下行引起的吗?如果是,那么我应该将其设置为什么?

$mail->SMTPDebug = 3;

G-Suite中是否有配置

以下是上一篇文章的更新代码:

  $mail = new PHPMailer(true);

  $mail->isSMTP();
  $mail->SMTPDebug = 3; 
  $mail->SMTPAuth = true;
  $mail->SMTPSecure = "tls";
  $mail->Host = "smtp-relay.gmail.com";
  $mail->Port = "587";
  $mail->Username = "info@example.com";
  $mail->Password = "somePassword";
  $mail->setFrom("info@example.com");
  $mail->isHTML(true);
  $mail->Subject = $subject;
  $mail->Body = $htmlMessage;
  $mail->addAddress($recpEmails);
  $mail->Send();

提前感谢

共有1个答案

郎德馨
2023-03-14

结果发现答案在下面的帖子里

我用下面的方法通过PHP的邮件在仅文本和html版本之间构建mime边界:

创建文本消息-这应该与html完全相同,以避免被标记为垃圾邮件:

$plain_text = ""; // same words that will appear in the html

开始创建mime边界:

# -=-=-=- MIME BOUNDARY
$mime_boundary = "----example.com----".md5(time());
# -=-=-=- MAIL HEADERS

创建主题:

$subject = "example.com\n";

创建标头,其中将包括您前面开始的mime边界。此外,在头中添加纯文本消息-在第一个mime边界之间:

$headers = "From: example.com <cs@example.com>\n";
$headers .= "Reply-To: example.com <cs@example.com>\n";
$headers .= "BCC: example.com <info@example.com>\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/alternative; boundary=\"$mime_boundary\"\n";

$htmlMessage = "--$mime_boundary\n";
$htmlMessage .= "Content-Type: text/plain; charset=us-ascii\n";
$htmlMessage .= "Content-Transfer-Encoding: 7bit\n";
$htmlMessage .= "$plain_text\n";

$htmlMessage .= "--$mime_boundary\n";
$htmlMessage .= "Content-Type: text/html; charset=UTF-8\n";
$htmlMessage .= "Content-Transfer-Encoding: 8bit\n\n";
$htmlMessage .= "<html>\n";
$htmlMessage .= "<body>\n";
$htmlMessage .= "" // has to be the same words as the plain text to avoid being marked as spam
$htmlMessage .= "</body>\n";
$htmlMessage .= "</html>\n";

完成哑剧边界:

# -=-=-=- FINAL BOUNDARY
$htmlMessage .= "--$mime_boundary--\n\n";
# -=-=-=- SEND MAIL

然而,使用PHPMailer,所有这些代码不再需要使用以下两行代码:

  $mail->AltBody = $plain_text; 
  $mail->Body = $htmlMessage;

以下是我测试和使用的内容:

  $mail = new PHPMailer(true);

  $mail->isSMTP();
  $mail->SMTPDebug = 3; 
  $mail->SMTPAuth = true;
  $mail->SMTPSecure = "tls";
  $mail->Host = "smtp-relay.gmail.com";
  $mail->Port = "587";
  $mail->Username = "cs@example.com";
  $mail->Password = "somePassword";
  $mail->setFrom("cs@example.com");
  $mail->isHTML(true);
  $mail->Subject = $subject;
  $mail->AltBody = $plain_text; 
  $mail->Body = $htmlMessage;
  $mail->addAddress($recpEmails);
  $mail->Send();

差点忘了,但我就是这样添加密件抄送的:

  $mail->addBCC("info@example.com"); 
 类似资料:
  • 问题内容: 我希望能够执行拟合,使我可以将任意曲线函数拟合到数据,并允许我在参数上设置任意界限,例如,我想拟合函数: 说: 在以下范围内: 并且是积极的 有一个很好的scipy curve_fit 函数,但是它不允许指定参数范围。还有一个不错的http://code.google.com/p/pyminuit/库,该库可以进行泛型最小化,并且可以设置参数的范围,但在我的情况下,它没有涵盖范围。 问

  • null 这是第二步,我正在试图弄清楚。Tika有一种方法可以获得给定MIME的首选扩展(请参见getExtension),但我想反过来:给定扩展,检查MIME是否有效。

  • 我一直在捕捉非数字时遇到问题。 我试过了,但抓不住。如果我让它捕获非数字,但不让用户再次尝试输入。。。它完全停止了我的代码。 这是我的密码:

  • 问题内容: 我有以下CSS: 添加边框半径:5px似乎没有任何作用,我认为这是因为我使用的是边框渐变,我是否有办法完全实现所需的5px边框半径? 问题答案: You cannot use with gradient. Here is another idea where you can rely on multiple background and adjust the : 如果需要透明性,可以考

  • 这里是Java/C开发者。试图学习C语言,但我对数组的内存分配感到困惑。 这里发生了什么? 输出 怎么会这样?为什么我不能越界异常或程序崩溃?我能无限地做到这一点吗?在这种情况下,我的数组长度是多少?如果我的数组允许我将值放在界限之外,那么通过分配内存有什么意义?这对我来说毫无意义。