php - 如果 IsHTML 上有链接 href,PHPMailer 无法发送(true)
问题描述
我正在使用 PHPMailer 发送电子邮件。
$mail = new PHPMailer();
$mail->SMTPAuth= true;
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = "smtp.live.com"; // specify main and backup server
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "data.edi@outlook.com"; // SMTP username
$mail->Password = "*******"; // SMTP password
$mail->From = "data.edi@outlook.com";
$mail->FromName = "Office";
$mail->addAddress($getEmailAddress);
$mail->IsHTML(true);
$mail->Subject = "SIIX Email Renewal verification";
$mail->Body = "
<div style='line-height: 20px;'>
Dear All Outlook email user,<br><br>
To complete the outlook email renewal this year we need to verify whether this email received successfully or not.<br>
Please kindly help to verify by open the link below to confirm it.<br><br>
<a href='//1.1.1.1:8082/renewal/mail/verify.php?email=$getEmailAddress' style='font-size: 20px; color: #0055a7; font-weight: bold;'>
<img src='http://1.1.1.1:8082/renewal/mail/outlook.png'/><br>
<u>Verify Now</u></a><br><br>
Thank you<br>
Outlook Exchange Mail Administrator<br>
<img src='http://1.1.1.1:8082/renewal/mail/office.jpg'/>
</div>
";
$mail->Send();
当我尝试运行代码时,在接收电子邮件时我无法点击Verify Now
手机。
<a href='//1.1.1.1:8082/renewal/mail/verify.php?email=$getEmailAddress' style='font-size: 20px; color: #0055a7; font-weight: bold;'>
<img src='http://1.1.1.1:8082/renewal/mail/outlook.png'/><br>
<u>Verify Now</u></a>
然后我尝试将其修改为(添加http :)
<a href='http://1.1.1.1:8082/renewal/mail/verify.php?email=$getEmailAddress' style='font-size: 20px; color: #0055a7; font-weight: bold;'>
<img src='http://1.1.1.1:8082/renewal/mail/outlook.png'/><br>
<u>Verify Now</u></a>
尝试运行代码时,我没有看到收到任何电子邮件。
然后我尝试再次修改它(添加\
):
<a href=\'http://1.1.1.1:8082/renewal/mail/verify.php?email=$getEmailAddress\' style='font-size: 20px; color: #0055a7; font-weight: bold;'>
<img src='http://1.1.1.1:8082/renewal/mail/outlook.png'/><br>
<u>Verify Now</u></a>
然后我尝试再次运行代码并得到链接的结果是:
http://\http://1.1.1.1:8082/renewal/mail/verify.php?email=david.alwis@siix.com.sg\
如何解决?
更新
日志:
SMTP -> FROM SERVER:220 SG2PR04CA0156.outlook.office365.com Microsoft ESMTP
MAIL Service ready at Wed, 16 May 2018 09:09:58 +0000
SMTP -> FROM SERVER: 250-SG2PR04CA0156.outlook.office365.com Hello [175.111.116.70] 250-SIZE 157286400 250-PIPELINING 250-DSN 250-ENHANCEDSTATUSCODES 250-STARTTLS 250-8BITMIME 250-BINARYMIME 250-CHUNKING 250 SMTPUTF8
SMTP -> FROM SERVER:220 2.0.0 SMTP server ready
SMTP -> FROM SERVER: 250-SG2PR04CA0156.outlook.office365.com Hello [175.111.116.70] 250-SIZE 157286400 250-PIPELINING 250-DSN 250-ENHANCEDSTATUSCODES 250-AUTH LOGIN XOAUTH2 250-8BITMIME 250-BINARYMIME 250-CHUNKING 250 SMTPUTF8
SMTP -> FROM SERVER:250 2.1.0 Sender OK
SMTP -> FROM SERVER:250 2.1.5 Recipient OK
SMTP -> FROM SERVER:354 Start mail input; end with .
SMTP -> FROM SERVER:250 2.0.0 OK [Hostname=SG2PR06MB2122.apcprd06.prod.outlook.com]
SMTP -> FROM SERVER:220 SG2PR04CA0152.outlook.office365.com Microsoft ESMTP MAIL Service ready at Wed, 16 May 2018 09:09:59 +0000
SMTP -> FROM SERVER: 250-SG2PR04CA0152.outlook.office365.com Hello [175.111.116.70] 250-SIZE 157286400 250-PIPELINING 250-DSN 250-ENHANCEDSTATUSCODES 250-STARTTLS 250-8BITMIME 250-BINARYMIME 250-CHUNKING 250 SMTPUTF8
SMTP -> FROM SERVER:220 2.0.0 SMTP server ready
SMTP -> FROM SERVER: 250-SG2PR04CA0152.outlook.office365.com Hello [175.111.116.70] 250-SIZE 157286400 250-PIPELINING 250-DSN 250-ENHANCEDSTATUSCODES 250-AUTH LOGIN XOAUTH2 250-8BITMIME 250-BINARYMIME 250-CHUNKING 250 SMTPUTF8
SMTP -> FROM SERVER:250 2.1.0 Sender OK
SMTP -> FROM SERVER:250 2.1.5 Recipient OK
SMTP -> FROM SERVER:354 Start mail input; end with .
SMTP -> FROM SERVER:250 2.0.0 OK [Hostname=SG2PR06MB2122.apcprd06.prod.outlook.com]
SMTP -> FROM SERVER:220 SG2PR04CA0167.outlook.office365.com Microsoft ESMTP MAIL Service ready at Wed, 16 May 2018 09:10:00 +0000
SMTP -> FROM SERVER: 250-SG2PR04CA0167.outlook.office365.com Hello [175.111.116.70] 250-SIZE 157286400 250-PIPELINING 250-DSN 250-ENHANCEDSTATUSCODES 250-STARTTLS 250-8BITMIME 250-BINARYMIME 250-CHUNKING 250 SMTPUTF8
SMTP -> FROM SERVER:220 2.0.0 SMTP server ready
SMTP -> FROM SERVER: 250-SG2PR04CA0167.outlook.office365.com Hello [175.111.116.70] 250-SIZE 157286400 250-PIPELINING 250-DSN 250-ENHANCEDSTATUSCODES 250-AUTH LOGIN XOAUTH2 250-8BITMIME 250-BINARYMIME 250-CHUNKING 250 SMTPUTF8
SMTP -> FROM SERVER:250 2.1.0 Sender OK
SMTP -> FROM SERVER:250 2.1.5 Recipient OK
SMTP -> FROM SERVER:354 Start mail input; end with .
SMTP -> FROM SERVER:250 2.0.0 OK [Hostname=SG2PR06MB2122.apcprd06.prod.outlook.com]
解决方案
与协议相关的 URL(以 开头//
)不能在电子邮件中工作,因为它们没有相关的协议 - 一般来说,电子邮件没有 URL。请参阅我对此主题的回答。
不要添加斜线;那不会有帮助的。我建议切换到heredoc来设置您的消息正文 - 它完全避免了引用问题,并且变量插值仍然有效。例如:
$mail->Body = <<<EOT
<div style="line-height: 20px;">
Dear All Outlook email user,<br><br>
To complete the outlook email renewal this year we need to verify whether this email received successfully or not.<br>
Please kindly help to verify by open the link below to confirm it.<br><br>
<a href="http://1.1.1.1:8082/renewal/mail/verify.php?email=$getEmailAddress" style="font-size: 20px; color: #0055a7; font-weight: bold;">
<img src="http://1.1.1.1:8082/renewal/mail/outlook.png"/><br>
<u>Verify Now</u></a><br><br>
Thank you<br>
Outlook Exchange Mail Administrator<br>
<img src="http://1.1.1.1:8082/renewal/mail/office.jpg"/>
</div>
EOT;
另一项观察 - 消息正文应该是一个完整的 HTML 文档,包括 html、标题和正文标记 - 你只有一个片段。
当您说“我没有看到收到任何电子邮件”时,您的意思是发送电子邮件失败了吗?您的代码中没有错误检查,因此如果发生错误,您将不会看到错误。您的代码基于 PHPMailer 提供的示例,其中包含基本的错误检查。
推荐阅读
- cmake - Cmake 和 vcpkg - 找到正确的库名称
- django - 如何只允许从特定页面访问 url
- php - 使用 ajax 将 index.php 页面中的下拉选项选择值发送到 codeigniter 中的 search.php
- ruby-on-rails - 临时文件停止存在于块外的实例变量中
- php - Codeigniter 三表连接,显示图片问题
- python - 迭代列表(长度 n)以包含集合 X 的所有可能变体,其中 n 大于 len(unique(X))
- php - php中的基本数组迭代
- android - Android:如何创建从 AppCompatPreference 扩展的片段
- json - 从 Django 模型对象创建自定义 JSON 输出
- android - Android - 使用 SVGMapView