如何使用PEAR邮件发送HTML邮件

25
我正在使用PEAR邮件系统发送认证邮件。我需要发送包含链接的HTML邮件。在我开始使用PEAR邮件之前,它正常工作。现在我无法发送HTML邮件。
邮件正文如下:
$body = <<<EOD

Hiya $username

You might be interested in the current 'haves' and 'wants' on example.com

Latest Haves
<a href="http://www.exmaple.com/product/have/64/Titan+Fast+Track+SunGlass">Titan Fast Track SunGlass</a>

EOD;

邮件中的链接标签显示不正常。有什么解决办法吗?求帮忙...


看一下 Mail_mime 包。它允许您包含电子邮件的 HTML 和纯文本版本: http://pear.php.net/manual/en/package.mail.mail-mime.example.php - nikc.org
3个回答

33

如果您按照这个示例,就没有理由它不能正常工作:

<?php
include('Mail.php');
include('Mail/mime.php');

// Constructing the email
$sender = "Leigh <leigh@no_spam.net>";// Your name and email address
$recipient = "Leigh <leigh@no_spam.net>"; // The Recipients name and email address
$subject = "Test Email";// Subject for the email
$text = 'This is a text message.';// Text version of the email
$html = '<html><body><p>HTML message</p></body></html>';// HTML version of the email
$crlf = "\r\n";
$headers = array('From' => $sender, 'Return-Path' => $sender, 'Subject' => $subject);

// Creating the Mime message
$mime = new Mail_mime($crlf);

// Setting the body of the email
$mime->setTXTBody($text);
$mime->setHTMLBody($html);

$body = $mime->get();
$headers = $mime->headers($headers);

// Sending the email
$mail =& Mail::factory('mail');
$mail->send($recipient, $headers, $body);
?>

注意:为了使上面的示例工作,除了需要Pear Mail,还需要安装Pear Mail Mime包。您可以在此处获取该软件包https://pear.php.net/package/Mail_Mime/download


1
SMTP服务器配置怎么样?你有相关链接吗? - Francisco Corrales Morales
1
嗨,我读了https://pear.php.net/manual/en/package.mail.mail.send.php,在`$headers`中有一个`To`。我想知道`send()`方法中的收件人电子邮件`$recipient`和`$headers`变量中的收件人电子邮件之间有什么区别?在`$headers`中放置`To`是否必要? - stenlytw
@karim79 - 你能帮我处理关于 http://stackoverflow.com/questions/39785613/html-email-through-ses-smtp-interface-pear 的问题吗? - S R
你如何处理这个程序的错误?如果电子邮件发送失败或SMTP服务器崩溃会发生什么?这段代码没有考虑到任何一种情况。(我提出这个问题是因为我正在寻找一个具有错误处理的示例。) - Tiffany
@John,我希望你能帮我解决这个问题 https://stackoverflow.com/questions/58309553/how-to-include-php-html-file-in-pear-mail 谢谢。 - Jay Smoke

19

你的标题看起来是什么样子的?以下是我的:

$headers = array(
    'To' => $recipients,
    'From' => $adminEmail,
    'Subject' => $subject,
    'MIME-Version' => 1,
    'Content-type' => 'text/html;charset=iso-8859-1'
);

4
这个功能非常出色,无需寻找额外的库。 - user4237179
3
无需额外的库即可完美运行! - Mazz
@story 你能帮我解决这个问题吗?https://stackoverflow.com/questions/58309553/how-to-include-php-html-file-in-pear-mail - Jay Smoke

3
请注意,karim79发布的示例中有一个标题参数可能会给您带来很多麻烦:"Return-Path" - 当我像示例一样包含此参数时,它阻止我添加发件人名称,只有发件人电子邮件地址有效。
具体而言(当我添加了一个调试参数以查看发生了什么时),在发件人姓名周围添加了额外的尖括号,因此它尝试将其发送到smtp服务器:

From: <from name <name@domain.com>> 或
From: <"from name" <name@domain.com>> 当我尝试使用引号时。
这导致smtp连接以无效地址的错误退出。
此外,在使用mime_mail类时,您需要在标题中指定"To:"参数,否则当您接收邮件时,它将显示为发送到未公开地址。因此,请用To参数替换Return-Path参数,它就可以正常工作。

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