使用codeigniter发送html邮件

时间:2012-02-01 12:08:12

标签: html email codeigniter

在codeigniter中使用SMTP的邮件内容出错 实际上,我的邮件是使用HTML个标签发送的,它显示的HTML标签不正确。

$config = Array(
'protocol' => 'smtp',
        'smtp_host' => 'ssl://smtp.googlemail.com',
        'smtp_port' => 465,
        'smtp_user' => 'user@gmail.com',
        'smtp_pass' => '',
        'mailtype'  => 'html', 
        'charset' => 'utf-8',
        'wordwrap' => TRUE

    );
    $this->load->library('email', $config);
    $this->email->set_newline("\r\n");
    $email_body ="<div>hello world</div>";
    $this->email->from('user@gmail.com', 'ddd');

    $list = array('user@gmail.com');
    $this->email->to($list);
    $this->email->subject('Testing Email');
    $this->email->message($email_body);

    $this->email->send();
    echo $this->email->print_debugger();

如果不使用SMTP发送邮件,它可以正常工作。我的错是什么?

12 个答案:

答案 0 :(得分:71)

您可以尝试使用此行代码将邮件类型设置为HTML

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

答案 1 :(得分:21)

截至CodeIgniter 3.x。添加了许多功能。此示例与早期版本几乎相同,但您可以执行更多操作。

请点击文档链接。

// load email library
$this->load->library('email');

// prepare email
$this->email
    ->from('info@example.com', 'Example Inc.')
    ->to('to@example.com')
    ->subject('Hello from Example Inc.')
    ->message('Hello, We are <strong>Example Inc.</strong>')
    ->set_mailtype('html');

// send email
$this->email->send();

如果您有模板设计。您还可以在message方法中包含模板,如此...

->message($this->load->view('email_template', $data, true))

此处,您的views目录中的第一个参数是email_template.php,第二个参数是要发送到电子邮件模板的数据,您可以将其设置为''array()或{{1}如果没有传递任何动态数据和最后一个参数[],请确保获取模板数据而不是输出。

希望这有用。

答案 2 :(得分:3)

将邮件类型设置为HTML对我有用:

$email_setting  = array('mailtype'=>'html');
$this->email->initialize($email_setting);

答案 3 :(得分:2)

尝试手动设置内容类型标题:

$this->email->set_header('Content-Type', 'text/html');

为我解决问题。

答案 4 :(得分:1)

Gmail会阻止您访问自己的帐户。你需要对你的Gmail进行一些更改: -

步骤:1

  

某些应用和设备使用安全性较低的登录技术   您的帐户更容易受到攻您可以关闭这些应用的访问权限,   我们建议使用,或者如果您想使用它们,请打开访问权限   风险。

Turn on less secure app

步骤:2

  

启用IMAP状态
    启用POP状态

Enable IMAP and POP Status

答案 5 :(得分:1)

要发送HTML电子邮件,您首先必须在变量中撰写邮件,然后将该变量传递给codeigniter&#34; $ this-&gt; email-&gt; message()&#34;方法,如下,

 $this->load->library('email');

 $message = "
     <html>
       <head>
         <title>your title</title>
       </head>
       <body>
         <p>Hello Sir,</p>
         <p>Your message</p>
       </body>
     </html>";

   $this->email->from('email id', 'name');
   $this->email->to('email id');

   $this->email->subject('email subject');
   $this->email->message($message);

   if ($this->email->send()) {
     print "success";
   } else {
     print "Could not send email, please try again later";
   }
希望它会有所帮助。

享受!!

答案 6 :(得分:1)

添加以下代码行:

$this->email->set_mailtype("html");
$this->email->set_newline("\r\n");
$this->email->set_crlf("\r\n");

答案 7 :(得分:0)

我的问题是Codeigniter的全局XSS过滤正在编码一些html标签,如<html>,因此电子邮件客户端无法再识别它们。

要解决此问题,请查看我的其他post

答案 8 :(得分:0)

您能否尝试使用此代码,B&#39; z我可以使用此代码发送HTML电子邮件。

$configemail = Array(
        'protocol' => 'smtp',
        'smtp_host' => 'ssl://smtp.gmail.com', //mail.webconsort.com
        'smtp_port' => 465, //5074
        'smtp_user' => 'XXXXXXXX@gmail.com', //tororide@webconsort.com
        'smtp_pass' => 'XXXXXXXX', //'T0r0r1d3'
        'mailtype'  => 'html', 
        'charset'   => 'iso-8859-1'
    );

    $CI =& get_instance();

    $CI->load->library('email', $configemail);

    $CI->email->initialize($configemail);
    $CI->email->set_newline("\r\n");

    $CI->email->from($from, $fromName);
    $CI->email->to($to); 

    $CI->email->subject($subject);
    $CI->email->message($body);
    if ($attachments != null && !empty($attachments)){
        foreach($attachments as $a){
            $CI->email->attach($a);
        }
    }

    try{
        $CI->email->send();
        return true;
    }
    catch (Exception $e){
        //var_dump($e);
    }

答案 9 :(得分:0)

像这样使用..它对我很有用。

$this->load->library('email');

$config['charset'] = 'iso-8859-1';

$config['wordwrap'] = TRUE;

$config['mailtype'] = 'html';

$this->email->initialize($config);

$this->email->from($fromemail);

$this->email->to($toemail);

$this->email->subject('Subject');

$this->email->message($html);

$success=$this->email->send();

答案 10 :(得分:0)

$message = '
<html>
<head>
<title>Birthday Reminders for August</title>
</head>
<body>
<p>Here are the birthdays upcoming in August!</p>
<table>
<tr>
<th>Person</th><th>Day</th><th>Month</th><th>Year</th>
</tr>
<tr>
<td>Johny</td><td>10th</td><td>August</td><td>1970</td>
</tr>
<tr>
<td>Sally</td><td>17th</td><td>August</td><td>1973</td>
</tr>
</table>
</body>
</html>
';

$config = Array(
'protocol' => 'smtp',
'smtp_host' => 'ssl://mail.example.com',
'smtp_port' => 465,
'smtp_user' => 'noreply@example.com',
'smtp_pass' => 'example@123',
'mailtype'  => 'html',
'charset'   => 'iso-8859-1'
);

$this->load->library('email', $config);
$this->email->set_mailtype("html");
$this->email->set_newline("\r\n");
$this->email->from('noreply@example.com', 'example');
$this->email->to('example@example.in');
$this->email->subject('Enquiry');
$this->email->message($message);

答案 11 :(得分:-1)

你会试试!!在发现许多错误后,它在我的工作中工作了100%。

        $subject = 'New message.';
        $config = Array(        
            'protocol' => 'sendmail',
            'smtp_host' => 'Your smtp host',
            'smtp_port' => 465,
            'smtp_user' => 'webmail',
            'smtp_pass' => 'webmail pass',
            'smtp_timeout' => '4',
            'mailtype'  => 'html', 
            'charset'   => 'utf-8',
            'wordwrap' => TRUE
        );
        $this->load->library('email', $config);
        $this->email->set_newline("\r\n");
        $this->email->set_header('MIME-Version', '1.0; charset=utf-8');
        $this->email->set_header('Content-type', 'text/html');

        $this->email->from('from mail address', 'Company name ');
        $data = array(
             'message'=> $this->input->post('message')
                 );
        $this->email->to($toEmail);  
        $this->email->subject($subject); 

        $body = $this->load->view('email/sendmail.php',$data,TRUE);
        $this->email->message($body);   
        $this->email->send();