如何在 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
How to send an HTML email using SMTP in PHP
提问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.
并单击克隆或下载按钮并设置您的系统文件夹。