发送 HTML 电子邮件导致电子邮件显示 HTML 源代码(Codeigniter 电子邮件类)

Posted

技术标签:

【中文标题】发送 HTML 电子邮件导致电子邮件显示 HTML 源代码(Codeigniter 电子邮件类)【英文标题】:Sending HTML Email results in Email displaying HTML source (Codeigniter Email Class) 【发布时间】:2011-09-10 13:46:45 【问题描述】:

我在通过 Codeigniter 中的电子邮件类发送电子邮件时遇到问题,该电子邮件在电子邮件消息中显示源 html 代码而不是呈现的 HTML 视图。为了测试,我目前在 Windows 上的 XAMPP 上使用 CI,并使用 Gmail SMTP 发送到相同的 gmail 地址。

发送邮件的函数如下:

$config = Array(
        'protocol' => 'smtp',
        'smtp_host' => 'ssl://smtp.googlemail.com',
        'smtp_port' => 465,
        'smtp_user' => 'myaccountname@gmail.com',
        'smtp_pass' => 'mygmailpassword',
        );

    $this->load->library('email', $config); 
    $this->email->from($this->config->item('webmaster_email', 'tank_auth'), $this->config->item('website_name', 'tank_auth'));
    $this->email->reply_to($this->config->item('webmaster_email', 'tank_auth'), $this->config->item('website_name', 'tank_auth'));
    $this->email->to($email);
    $this->email->subject(sprintf($this->lang->line('auth_subject_'.$type), $this->config->item('website_name', 'tank_auth')));
    $this->email->message($this->load->view('email/'.$type.'-html', $data, TRUE));
    $this->email->set_alt_message($this->load->view('email/'.$type.'-txt', $data, TRUE));

    $this->email->set_newline("\r\n"); // require this, otherwise sending via gmail times out

    $this->email->send();

发送文本版本没有问题。加载的视图是一个 html 文件,将通过电子邮件发送出去。

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title>Welcome to <?php echo $site_name; ?>!</title></head>
<body>
<div style="max-width: 800px; margin: 0; padding: 30px 0;">
<table  border="0" cellpadding="0" cellspacing="0">
<tr>
<td ></td>
<td align="left"  style="font: 13px/18px Arial, Helvetica, sans-serif;">
<h2 style="font: normal 20px/23px Arial, Helvetica, sans-serif; margin: 0; padding: 0 0 18px; color: black;">Welcome to <?php echo $site_name; ?>!</h2>
Thanks for joining <?php echo $site_name; ?>. We listed your sign in details below, make sure you keep them safe.<br />
To verify your email address, please follow this link:<br />
<br />
<big style="font: 16px/18px Arial, Helvetica, sans-serif;"><b><a href="<?php echo site_url('/auth/activate/'.$user_id.'/'.$new_email_key); ?>" style="color: #3366cc;">Finish your registration...</a></b></big><br />
<br />
Link doesn't work? Copy the following link to your browser address bar:<br />
<nobr><a href="<?php echo site_url('/auth/activate/'.$user_id.'/'.$new_email_key); ?>" style="color: #3366cc;"><?php echo site_url('/auth/activate/'.$user_id.'/'.$new_email_key); ?></a></nobr><br />
<br />
Please verify your email within <?php echo $activation_period; ?> hours, otherwise your registration will become invalid and you will have to register again.<br />
<br />
<br />
<?php if (strlen($username) > 0)  ?>Your username: <?php echo $username; ?><br /><?php  ?>
Your email address: <?php echo $email; ?><br />
<?php if (isset($password))  /* ?>Your password: <?php echo $password; ?><br /><?php */  ?>
<br />
<br />
Have fun!<br />
The <?php echo $site_name; ?> Team
</td>
</tr>
</table>
</div>
</body>
</html>

任何想法如何让发送的 HTML 电子邮件被渲染而不是显示其源代码?

【问题讨论】:

您不能在电子邮件正文中使用 PHP。我也不确定您是否需要 或 标签。 @Nik:PHP 正在生成发送的 HTML,它实际上并不是电子邮件正文中。 第二个代码段不是电子邮件中的 HTML 吗?里面有PHP。显然第一个代码段是生成。 【参考方案1】:

在加载您的 codeigniter 邮件库后添加这两行

$this->email->set_header('MIME-Version', '1.0; charset=utf-8');
$this->email->set_header('Content-type', 'text/html');

完整配置:https://***.com/a/38740292/4376484

【讨论】:

调用未定义的方法 CI_Email::set_header()【参考方案2】:

添加下面示例中注释的行:

$config['protocol'] = 'sendmail';
$config['mailpath'] = '/usr/sbin/sendmail';
$config['charset'] = 'iso-8859-1';
$config['wordwrap'] = TRUE;
$config['mailtype'] = 'html'; // Append This Line
$this->email->initialize($config);

【讨论】:

【参考方案3】:

试试这个

$this->email->set_mailtype("html");

【讨论】:

谢谢你,真的很奇怪。需要设置两次吗?或在 $this->load->library('email', $config); $config 它不起作用。再次感谢【参考方案4】:
Set $config['protocol'] = "sendmail";

为我解决了这个问题

【讨论】:

【参考方案5】:

尝试将mailtype 添加到配置中:

$config = Array(
    'mailtype' => 'html',
    ...etc...
);

见http://codeigniter.com/user_guide/libraries/email.html

【讨论】:

以上是关于发送 HTML 电子邮件导致电子邮件显示 HTML 源代码(Codeigniter 电子邮件类)的主要内容,如果未能解决你的问题,请参考以下文章

PhpMailer 发送的电子邮件内容仅显示纯文本,不包含 HTML 样式

从 PHP 发送的电子邮件中显示 HTML 的问题

使用Python在HTML电子邮件中发送附件

对于从 java 程序发送的电子邮件,html 内容中的 png 图像未显示在 gmail 客户端上

发送 html 模板时不显示 Flask-mail 图像

HTML 电子邮件未正确显示