如何在 PHP 中使用 SMTP 发送 HTML 电子邮件

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/7814910/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-26 03:25:00  来源:igfitidea点击:

How to send an HTML email using SMTP in PHP

phphtmlemailsmtp

提问by user1002144

I've been able to send an email using SMTP in PHP, but when I try to change the Content Type to HTML, the email doesn't get delivered. This is the code I'm trying to use:

我已经能够在 PHP 中使用 SMTP 发送电子邮件,但是当我尝试将内容类型更改为 HTML 时,电子邮件无法发送。这是我尝试使用的代码:

    require_once "Mail.php";

    $from = "FPM <[email protected]>";
    $from_name = "FPM";

    $host = "localhost";
    $username = "username";
    $password = "password";

    $subject = "Subject";
    $message = "Message";

    $to = "<[email protected]>";
    $headers = array ('From' => $from,
        'To' => $to,
        'Subject' => $subject,
        'MIME-Version' => '1.0',
        'Content-Type' => "text/html; charset=ISO-8859-1"
    );

    $smtp = Mail::factory('smtp',
        array ('host' => $host,
            'auth' => true,
            'username' => $username,
            'password' => $password));

    $mail = $smtp->send($to, $headers, $message);

If I take the 'Content-Type' argument out of the headers, it sends the message just fine. I don't know why adding that causes a problem.

如果我从标题中取出 'Content-Type' 参数,它会很好地发送消息。我不知道为什么添加会导致问题。

采纳答案by carpii

The problem most likely lies in the Mail class, but since we don't know what Mail class you're using, it's difficult to answer. If you're not already doing so, I'd really think about using PHPMailer: https://github.com/PHPMailer/PHPMailer

问题很可能出在 Mail 类中,但由于我们不知道您使用的是什么 Mail 类,因此很难回答。如果您还没有这样做,我真的会考虑使用 PHPMailer:https: //github.com/PHPMailer/PHPMailer

回答by Bandish Patel

I did some research, then I made my own code to send mail with HTML formatting using SMTP authentication. See here:

我做了一些研究,然后我编写了自己的代码来使用 SMTP 身份验证发送 HTML 格式的邮件。看这里:

<?php 
require_once "Mail.php";
$url = $_GET['baseUrl']; // source url
$success = false;
$senderName = isset( $_GET['txtname'] ) ? preg_replace( "/[^\.\-\' a-zA-Z0-9]/", "", $_GET['txtname'] ) : "";
$senderEmail = isset( $_GET['txtemail'] ) ? preg_replace( "/[^\.\-\_\@a-zA-Z0-9]/", "", $_GET['txtemail'] ) : "";
$msg = isset( $_GET['txtDesc'] ) ? preg_replace( "/(From:|To:|BCC:|CC:|Subject:|Content-Type:)/", "", $_GET['txtDesc'] ) : "";
$body = '<table width="400" border="0">
  <tr>
    <th scope="col">Name:</th>
    <th scope="col">'.$senderName.'</th>
  </tr>
  <tr>
    <th scope="col">Company:</th>
    <td scope="col">'.$_GET['txtCompany'].'</td>
  </tr>
  <tr>
    <th scope="row">Phone:</th>
    <td>'.$_GET['txtphone'].'</td>
  </tr>
  <tr>
    <th scope="row">E-mail:</th>
    <td>'.$senderEmail.'</td>
  </tr>
  <tr>
    <th scope="row">URL:</th>
    <td>'.$url.'</td>
  </tr>
  <tr>
    <th scope="row">Massage:</th>
    <td>'.$msg.'</td>
  </tr>
</table>';

 $from = $senderName."<".$senderEmail.">";
 $to = "Contact ManagerHR<[email protected]>";
 $subject = "Hi!";
 $host = "XXX.host.com";
 $username = "[email protected]";
 $password = "*****";
 /* MIME-Version should be "1.0rn" and Content-Type should be "text/html; charset=ISO-8859-1rn" to send an HTML Email */
$headers = array ('MIME-Version' => '1.0rn',
        'Content-Type' => "text/html; charset=ISO-8859-1rn",
        'From' => $from,
        'To' => $to,
        'Subject' => $subject
     );
$smtp = Mail::factory('smtp',
   array ('host' => $host,
     'auth' => true,
     'username' => $username,
     'password' => $password));
$mail = $smtp->send($to, $headers, $body);
 if (PEAR::isError($mail)) {
   echo("<p>" . $mail->getMessage() . "</p>");
  } else {
      header('Location: '.$url); // redirect to url where from inquiry made
   //echo("<p>Message successfully sent!</p>");
  }
 ?>

回答by Stoia Alex

You should create the mail body via mime object. And pear will handle it from there. Ex:

您应该通过 mime 对象创建邮件正文。梨会从那里处理它。前任:

     $crlf = "\n";
    // Creating the Mime message
    $mime = new Mail_mime($crlf);

    // Setting the body of the email
    $mime->setTXTBody($text);
    $mime->setHTMLBody($html);
   ...
    $body = $mime->get();

回答by Lyovo Graphics

Send your HTML email using SMTP in PHP to 2 or 3 different emails WORKING 100%

使用 PHP 中的 SMTP 将您的 HTML 电子邮件发送到 2 或 3 个不同的电子邮件,工作 100%

<?php

require_once "Mail.php";

$host = "ssl://smtp.gmail.com";
$username = "[email protected]";
$password = "password";
$port = "465";

$to  = '[email protected]' . ', '; 
$to  = '[email protected]' . ', '; 
$to  = '[email protected]' . ', '; 

$email_from = "[email protected]";
$email_subject = "Your Subject";

$email_body = "**<html> <body>**"; 
$email_body .= "<strong> Your HTML code </strong>";
$email_body .= "**</body></html>**";


$headers = array ('From' => $email_from, 'To' => $to, 'Subject' => 
$email_subject, 'Reply-To' => $email_address , 'MIME-Version' => '1.0', 'Content-Type' => "text/html; charset=ISO-8859-1");

$smtp = Mail::factory('smtp', array ('host' => $host, 'port' => $port, 'auth' => true, 'username' => $username, 'password' => $password));

$mail = $smtp->send($to, $headers, $email_body);

?>

回答by Rohit Suthar

Write content type in a first line of header just like this

像这样在标题的第一行写入内容类型

$to = "<[email protected]>"; $headers = array ('Content-Type' => "text/html; charset=ISO-8859-1", 'From' => $from, 'To' => $to, 'Subject' => $subject, 'MIME-Version' => '1.0' ); 

This is working for me..

这对我有用..

回答by Yagnesh bhalala

You can complete in two steps.

您可以分两步完成。

Step 1: Put code in your file:

第 1 步:将代码放入您的文件中:

<?php
require 'PHPMailerAutoload.php';

$mail = new PHPMailer;

//$mail->SMTPDebug = 3;                               // Enable verbose debug output

$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = '[email protected]';                 // SMTP username
$mail->Password = 'secret';                           // SMTP password
$mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587;                                    // TCP port to connect to

$mail->setFrom('[email protected]', 'Mailer');
$mail->addAddress('[email protected]', 'Joe User');     // Add a recipient
$mail->addAddress('[email protected]');               // Name is optional
$mail->addReplyTo('[email protected]', 'Information');
$mail->addCC('[email protected]');
$mail->addBCC('[email protected]');

$mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
$mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name
$mail->isHTML(true);                                  // Set email format to HTML

$mail->Subject = 'Here is the subject';
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}

Step:2 Download this included file in given URL.
Url: https://github.com/PHPMailer/PHPMailer.git

步骤:2 在给定的 URL 中下载此包含的文件。
网址:https: //github.com/PHPMailer/PHPMailer.git

and click on clone or downloadbutton and set folder your system.

并单击克隆或下载按钮并设置您的系统文件夹。