我有一个问题,我真的很绝望。这里的情况:
我想通过 codeigniter 发送一份时事通讯 html 电子邮件。这是我的控制器:
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class mail extends CI_Controller {
function __construct(){
parent::__construct();
}
function send_email() {
$this->load->view('mail_form');
$this->load->library('phpmailer');
$this->load->helper('url');
if(isset($_POST['btnsend'])) {
$mail = new PHPMailer(); // defaults to using php "mail()"
$mail->CharSet="UTF-8";
$path=base_url() . 'assets/mail.html';
$body=file_get_contents($path);
$mail->SetFrom('bla@bla.com','blabla.com');
address = $_POST['email'];
$mail->AddAddress($address, "Guest");
$mail->Subject = "bla";
$mail->MsgHTML($body);
$mail->AddEmbeddedImage('logo.jpg', 'logo', 'logo.jpg','base64','image/jpeg');
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "A test email sent to your email address '".$_POST['email']."' Please Check Email and Spam too.";
}
}
}
}
PS:phpmailer库要先下载。该脚本中还有另一个用于加载视图的函数索引。
这是我的观点,您可以在其中留下您的邮件地址,以便您收到时事通讯:
<html>
<head>
<title>Send Email</title>
</head>
<body>
<form enctype="multipart/form-data" method="post" action="<?php echo base_url('index.php/mail/send_email'); ?>">
<table width="461" height="138" border="1">
<tr>
<td width="141">Enter Your Email Here</td>
<td width="187">
<input name="email" id="email" type="text" />
<input type="submit" name="btnsend" id="btnsend" value="Send Email" /></td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
</table>
</form>
</body>
</html>
html-email 模板由一些交错的表格组成。在浏览器中打开该模板时会完美显示。但是当通过邮件发送时,它会被撕碎。格式正确的文件在电子邮件客户端中显示不正确。徽标图像和特殊字符正确显示,但在邮件中显示“< meta http-equiv="Content-Type" content="text/html; charset=utf-8">" 在内容开始之前作为文本(不是 html 代码)。尽管在原始 html 文件中所有内容都是正确的,但一些内容丢失并且一些结束标记 ("") 加倍。
那么错误在哪里呢?file_get_contents() 方法不是解析 html 文档的正确方法吗?我已经尝试对简单 html dom ( http://simplehtmldom.sourceforge.net/ ) 的“file_get_html”使用不同的方法,但未能在 codeigniter 中运行该库。恐怕我无法发布电子邮件 html 模板,因为它是太长,内容包含敏感信息。但我不认为错误在 html 文件中。有没有人有提示,一些链接或知道这个脚本是如何工作的?
PS:对不起我的英语不好!
问候