我有点奇怪。使用PHP Pear Mail我发送的HTML电子邮件中包含指向子域http://mysub.mydomain.co.uk
$body='<html><body><strong>Hello '.$forename.'</strong><br><br>Thank you for registering your details. To complete the process, please follow the link below in this email.<br><br>
<a href="http://mysub.mydomain.co.uk?V='.$myvalue.'">Complete Verification Here</a></body></html>';
$headers = array ('From' => $from,'To' => $to,'Subject' => $subject);
$mime = new Mail_mime();
$mime->setHTMLBody($body);
$headers = $mime->headers($headers);
$smtp = Mail::factory('smtp',
array ('host' => $host,
'auth' => true,
'username' => $username,
'password' => $password)
);
$mail = $smtp->send($to, $headers, $body);
电子邮件被发送正常,如果我从发送电子邮件的页面将电子邮件正文打印到屏幕上,链接工作正常。但是,当它到达MS Outlook中的电子邮件时,它会从链接中的myvalue中取出前2个字符。如果myvalue=12345678
显示myvalue=345678
并且错误地显示链接,例如它会将上面显示为ttp://mysub.mydomain.co.uk/?V=345678
。请注意,它会删除http地址中的 H ,并在?v=
之前添加正斜杠,前两个数字12
也会丢失。然后它无法打开链接,因为它错误地显示为http链接。该电子邮件也不会在Gmail上以HTML电子邮件形式发送,也没有链接。
知道我在这里缺少什么吗?
答案 0 :(得分:0)
最终找到了问题
在正文中我不得不替换
中的每一个事件"
使用ASCII码
'
现在工作正常
答案 1 :(得分:0)
您不必操作mail_mime包之外的正文文本,您需要使用它对主体进行mime编码:
$mime = new Mail_mime();
$mime->setHTMLBody($body);
$mimebody = $mime->get();
$headers = $mime->headers($headers);
$smtp = Mail::factory(
'smtp',
[
'host' => $host,
'auth' => true,
'username' => $username,
'password' => $password,
'port' => $port
]
);
// send email
$mail = $smtp->send($to, $headers, $mimebody);