1

我有一个问题,我真的很绝望。这里的情况:

我想通过 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">&nbsp;</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:对不起我的英语不好!

问候

4

1 回答 1

0

解决了!感谢此链接: http: //www.jeremytunnell.com/posts/really-hairy-problem-with-seemingly-random-crlf-and-spaces-inserted-in-emails我找到了解决该错误的方法:

使用$mail->Encoding="base64";修复了问题

于 2013-08-27T07:59:05.303 回答