phpmailer 发送邮件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了phpmailer 发送邮件相关的知识,希望对你有一定的参考价值。

Github 地址:(已更新,适用于旧版)

PHPMailer : https://github.com/PHPMailer/PHPMailer

一、基本要求

  • Web访问正常(apache可以正常访问)
  • php 设置正确(Sockets Support、OpenSSL support 两项设置为enable)
  • gmail设置, 允许不够安全的应用:设置为已启用

可以写一个简单的语句测试一下:info.php

<?php
phpinfo();
?>

将下载好的phpmailer解压到web目录,我的目录结构如下:(主要的文件是红框中圈出的,目录中比你解压后多出的文件,请不要在意)

 

二、发送邮件测试(一)

标记为***xxx***的需要改成自己的信息。

<?php
require \'PHPMailerAutoload.php\';                    // 跟gmailer同在phpmailer文件夹下
$mail = new PHPMailer;
$mail->SMTPDebug = 1;              // 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 = \'***your_gmail_user_name@gmail.com***\';  // SMTP username
$mail->Password = \'***your_gmail_password***\';          // SMTP password
$mail->SMTPSecure = \'ssl\';          // Enable TLS encryption, `ssl` also accepted
$mail->Port = 465;               // TCP port to connect to
$mail->setFrom(\'***your_gmail_user_name@gmail.com***\', \'Mailer\');     // Add set from id
$mail->addAddress(\'***starnight_cyber at foxmail.com***\', \'Receiver\');   // Add a recipient
$mail->addAddress(\'***neverthinkaboutit at 163.com***\', \'Receiver\');     // Add a recipient
$mail->Subject = \'Helo, it is a test!\';
$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\';
}
?>

访问页面:http://localhost/phpmailer/gmailer.php, 您将得到如下输出,显示的是发送正确。(发送邮件的速度,即等待时间,跟连接到邮件服务器的速度有关)

下面是收件人的情况:(邮件发送后,需要稍等一分钟左右可以看到邮件,用gmail会更快些)

三、发送邮件测试(二)

  上面那个记不清是啥版本的,讲道理可能是phpmailer-5.2.18的例子,跟下面的phpmailer-5.2.16比较相像,但有少许不同,现补充如下:

  phpmailer-5.2.16下载地址:https://github.com/PHPMailer/PHPMailer/releases/tag/v5.2.16

<?php
/**
 * This example shows settings to use when sending via Google\'s Gmail servers.
 */

//SMTP needs accurate times, and the PHP time zone MUST be set
//This should be done in your php.ini, but this is how to do it if you don\'t have access to that
date_default_timezone_set(\'Etc/UTC\');

require \'PHPMailerAutoload.php\';

//Create a new PHPMailer instance
$mail = new PHPMailer;

//Tell PHPMailer to use SMTP
$mail->isSMTP();

//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 2;

//Ask for HTML-friendly debug output
$mail->Debugoutput = \'html\';

//Set the hostname of the mail server
$mail->Host = \'smtp.gmail.com\';
// use
// $mail->Host = gethostbyname(\'smtp.gmail.com\');
// if your network does not support SMTP over IPv6

//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission
$mail->Port = 587;

//Set the encryption system to use - ssl (deprecated) or tls
$mail->SMTPSecure = \'tls\';

//Whether to use SMTP authentication
$mail->SMTPAuth = true;

//Username to use for SMTP authentication - use full email address for gmail
$mail->Username = "starnightcyber@gmail.com";

//Password to use for SMTP authentication
$mail->Password = "your-password";        # look here, you need to change to your own mailer address and password

//Set who the message is to be sent from
$mail->setFrom(\'starnightcyber@gmail.com\', \'starnightcyber\');

//Set an alternative reply-to address
//$mail->addReplyTo(\'replyto@example.com\', \'First Last\');

//Set who the message is to be sent to
$mail->addAddress(\'zl15@foxmail.com\', \'liuzhen\');

//Set the subject line
$mail->Subject = \'PHPMailer GMail SMTP test\';

//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
$mail->msgHTML(file_get_contents(\'contents.html\'), dirname(__FILE__));

//Replace the plain text body with one created manually
$mail->Body    = \'Hello, this is a test mail using phpmailer\';
$mail->AltBody = \'Hello, this is a test mail using phpmailer\';
//Attach an image file
//$mail->addAttachment(\'images/phpmailer_mini.png\');

//send the message, check for errors
if (!$mail->send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
} else {
    echo "Message sent!";
}

  发送邮件输出日志如下:

SERVER -> CLIENT: 220 smtp.gmail.com ESMTP v22sm8729998pgb.65 - gsmtp
CLIENT -> SERVER: EHLO 192.168.0.8
SERVER -> CLIENT: 250-smtp.gmail.com at your service, [210.45.123.80]250-SIZE 35882577250-8BITMIME250-STARTTLS250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8
CLIENT -> SERVER: STARTTLS
SERVER -> CLIENT: 220 2.0.0 Ready to start TLS
CLIENT -> SERVER: EHLO 192.168.0.8
SERVER -> CLIENT: 250-smtp.gmail.com at your service, [210.45.123.80]250-SIZE 35882577250-8BITMIME250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8
CLIENT -> SERVER: AUTH LOGIN
SERVER -> CLIENT: 334 VXNlcm5hbWU6
CLIENT -> SERVER: c3Rhcm5pZ2h0Y3liZXJAZ21haWwuY29t
SERVER -> CLIENT: 334 UGFzc3dvcmQ6
CLIENT -> SERVER: MTIzQHdheW5lJmx6OTMj
SERVER -> CLIENT: 235 2.7.0 Accepted
CLIENT -> SERVER: MAIL FROM:<starnightcyber@gmail.com>
SERVER -> CLIENT: 250 2.1.0 OK v22sm8729998pgb.65 - gsmtp
CLIENT -> SERVER: RCPT TO:<zl15@foxmail.com>
SERVER -> CLIENT: 250 2.1.5 OK v22sm8729998pgb.65 - gsmtp
CLIENT -> SERVER: DATA
SERVER -> CLIENT: 354 Go ahead v22sm8729998pgb.65 - gsmtp
CLIENT -> SERVER: Date: Thu, 9 Nov 2017 01:49:55 +0000
CLIENT -> SERVER: To: liuzhen <zl15@foxmail.com>
CLIENT -> SERVER: From: starnightcyber <starnightcyber@gmail.com>
CLIENT -> SERVER: Subject: PHPMailer GMail SMTP test
CLIENT -> SERVER: Message-ID: <81fd574eec8f52c3080c06e671ff7e77@192.168.0.8>
CLIENT -> SERVER: X-Mailer: PHPMailer 5.2.16 (https://github.com/PHPMailer/PHPMailer)
CLIENT -> SERVER: MIME-Version: 1.0
CLIENT -> SERVER: Content-Type: multipart/alternative;
CLIENT -> SERVER: boundary="b1_81fd574eec8f52c3080c06e671ff7e77"
CLIENT -> SERVER: Content-Transfer-Encoding: 8bit
CLIENT -> SERVER: 
CLIENT -> SERVER: This is a multi-part message in MIME format.
CLIENT -> SERVER: 
CLIENT -> SERVER: --b1_81fd574eec8f52c3080c06e671ff7e77
CLIENT -> SERVER: Content-Type: text/plain; charset=us-ascii
CLIENT -> SERVER: 
CLIENT -> SERVER: Hello, this is a test mail using phpmailer
CLIENT -> SERVER: 
CLIENT -> SERVER: 
CLIENT -> SERVER: --b1_81fd574eec8f52c3080c06e671ff7e77
CLIENT -> SERVER: Content-Type: text/html; charset=us-ascii
CLIENT -> SERVER: 
CLIENT -> SERVER: Hello, this is a test mail using phpmailer
CLIENT -> SERVER: 
CLIENT -> SERVER: 
CLIENT -> SERVER: 
CLIENT -> SERVER: --b1_81fd574eec8f52c3080c06e671ff7e77--
CLIENT -> SERVER: 
CLIENT -> SERVER: .
SERVER -> CLIENT: 250 2.0.0 OK 1510192199 v22sm8729998pgb.65 - gsmtp
CLIENT -> SERVER: QUIT
SERVER -> CLIENT: 221 2.0.0 closing connection v22sm8729998pgb.65 - gsmtp
Message sent!
phpmailer-5.2.16 gmail发送邮件输出日志

 

最后,附上:Gmail,QMail,163邮箱的 IMAP/SMTP/POP3 地址

 

欢迎给我留言联系...

以上是关于phpmailer 发送邮件的主要内容,如果未能解决你的问题,请参考以下文章

PHP 通过PHPMailer发送邮件

使用 html 代码发送 phpmailer 电子邮件

thinkphp中怎么使用phpmailer发送邮件

使用 DKIM 密钥在 phpmailer 中发送邮件

PHPMailer-master不发送邮件[重复]

强制 phpmailer 发送正文为空的邮件