【问题标题】:Mail function not sending in HTML format邮件功能不以 HTML 格式发送
【发布时间】:2013-08-17 07:13:31
【问题描述】:

巨大的编辑!!!!!!!!! 好的,所以它不是 HTML 或其他什么。当我将其原始粘贴到 PHP 消息变量中时,它会以完美格式发送。这与 textarea 框粘贴部分有关……这使它无法正常工作。是换行吗?....嗯

好吧,这对我来说是令人沮丧的一天。我正在尝试发送 HTML 电子邮件,我可以将其粘贴到消息表单文本区域中。好吧,我把它剥离到了准系统,它不会让身体上方和身体被放入 HTML 之后的任何东西。

它打印这个:

<html> <head> <title>HalfOffDeals - Thank you!</title> </head> <body>

然后它吐出身体......虽然没有格式化没有样式。

然后是这样:

</body> </html>

我尝试将内联 CSS 放在样式标签中,但它完全忽略了这一点。我正在使用 CodeIgniter,但我不知道它是否会自动剥离它不应该的内容。我有一个表格,上面写着(TO、SUBJECT 和 MESSAGE)。在消息部分,您粘贴您的 HTML 电子邮件模板,并假设它发送到电子邮件。

我遇到的另一个问题是如何在标题中添加 '':

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";

我只是对为什么我的电子邮件不接受 HTML 感到困惑。我就是这样设置的:

public function send_email() {
    $to = $this->input->post('to');
    $subject = $this->input->post('subject');
    $message .= $this->input->post('message');

    // To send HTML mail, the Content-type header must be set
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";

    // Additional headers
    $headers .= 'To: Customer <'.$to . "\r\n";
    $headers .= 'From: noreply@intellectproductions.com <noreply@intellectproductions.com>' . "\r\n";

    // Mail it
    mail($to, $subject, $message, $headers);
}

有什么想法吗?

这是电子邮件模板:http://pastebin.com/D04cLXe4

【问题讨论】:

  • 我看到你使用$this-&gt;input-&gt;post() 那么,你在使用CodeIgniter 吗?因为如果你是,你可以使用CI Email class设置适当的邮件类型。
  • 是的,我正在使用 CodeIgniter。嗯,让我看看!

标签: codeigniter php


【解决方案1】:
 $headers .= 'To: Customer <'.$to . "\r\n";

改成

 $headers .= 'To: Customer <'. $to .'>'."\r\n";

并尝试:

$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";

change to 

$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";

你的服务器是 linux,如果 windows "\r\n",换行符是 "\n"

【讨论】:

  • 它仍然做同样的事情。吐出“ HalfOffDeals - 谢谢!”,显示正文未格式化,然后吐出结尾“ "
  • CI already has code to do this,我不认为在应用程序中这样做是个好建议。这段代码更难阅读,难以正确,因此也难以维护——使用框架抽象是一个更好的选择。
【解决方案2】:

我看到您确实在使用 CodeIgniter -- 所以,我建议使用 CodeIgniter's Email class

尝试将您的功能更改为:

public function send_email() {
    $to = $this->input->post('to');
    $subject = $this->input->post('subject');
    $message .= $this->input->post('message');

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

    // To send HTML mail, set the appropriate mailtype
    $this->email->set_mailtype('html');

    // setup the message
    $this->email->to($to);
    $this->email->from('noreply@intellectproductions.com');
    $this->email->subject('Put the subject here');
    $this->email->message($message);

    // Mail it
    $this->email->send();
}

这将正确处理 HTML 电子邮件,即使它们有附件。 将您的代码保存到重要的位置,而不是need to do all this work。 ;)

【讨论】:

  • 当我将它切换到使用 CI 电子邮件类时,它不会发送。我注意到它说“从”。那必须是有效的电子邮件地址吗?我必须做所有的stmp和密码吗?
  • 您可以在application/config/email.php file中配置发送邮件的默认设置。查看the class documentation 中的“设置电子邮件首选项”部分。
  • 好的,终于发送了。我想这需要很长时间,但它仍然不喜欢身体标签上方或下方的任何东西。查看我的粘贴箱了解我正在粘贴的内容..
【解决方案3】:

要在电子邮件中发送html,您可以使用默认的 CI 电子邮件设置;

    $this->load->library('email');
    $config = array(
        'mailtype' => 'html',
        'newline' => '\r\n',
        'charset' => 'utf-8' //default charset
    );
    $this->email->initialize($config);
    $this->email->from($sender);
    $this->email->to($receiver);
    $this->email->subject($subject);
    $this->email->message($message);
    $this->email->send();

更多详情请见CI email class。 也尝试使用$this-&gt;email-&gt;print_debugger() 来查看电子邮件错误/

【讨论】:

    【解决方案4】:

    回到我使用PHP邮件功能的时候,我也遇到了一些问题。然后我遇到了class phpmailer,我的问题就解决了。好好看看吧。这是值得的。

    【讨论】:

      猜你喜欢
      • 2010-11-26
      • 2014-06-22
      • 2015-07-19
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多