Home  >  Article  >  Backend Development  >  How to configure phplist and phpmailer (used in combination) to send emails through gmail_php skills

How to configure phplist and phpmailer (used in combination) to send emails through gmail_php skills

WBOY
WBOYOriginal
2016-05-16 19:55:111313browse

The example in this article describes the configuration method of phplist and phpmailer sending emails through gmail. Share it with everyone for your reference, the details are as follows:

Generally speaking, as long as you are not using a gmail mailbox, then using phplist to send emails only needs to be configured according to the previous "Detailed summary of the phplist configuration method of PHP mass mailing system". But if you are unlucky like me and have to use an email with SSL verification like gmail, then congratulations, my misfortune has now become your luck. After several days of trying, I finally successfully combined gmail and phplist. . I am sharing my experience here, hoping it will be useful to all comrades who are in the same situation as me. In addition, the core of phplist is phpmailer, and the solution I proposed mainly revolves around phpmailer, so those who need to use phpmailer to send emails through gmail but cannot succeed can also refer to my method.

First, follow the configuration method in "Detailed Summary of PHP Bulk Email System phplist Configuration Method" to send emails through gmail. When sending test emails, phplist will report a failure to send emails, and in the event log (eventlog) There will be an error message "Mailer Error: The following From address failed:...", saying that there is a problem with the sender address. Is it possible that the SMTP server has been connected, but there is a problem when sending emails? You can use a method to test whether you are connected to the SMTP server: I deliberately filled in the wrong email account password in the config.php file, but the same error was still reported when I sent the test email. It seems that I was not connected to the SMTP server at all. , the error report of this phplist is too...

If you know that it is not connected to the SMTP server, it means that the problem lies in the core of phplist sending emails - another famous open source software phpmailer.

I checked the information on phpmailer sending gmail emails online and found that people said that the old version of phpmailer did not support SSL verification and could not connect to gmail's SMTP server. This problem has been solved in the new version of phpmailer.

Open lists/admin/phpmailer/ChangeLog.txt and find that the latest version of phplist comes with phpmailer version 1.73, which was released in 2005. It is indeed not new. So I went to the official website of phpmailer and downloaded the latest 5.1.

I wanted to first study how the new version of phpmailer solves the problem of SSL verification, so I looked at some of the documentation that comes with it, and happened to find a use_gmail.txt under PHPMailer_v5.1/docs, which seemed to be The official pays more attention to the Gmail problem and has specially released a demo for people's reference. When you open it, it is indeed a complete php page file. Basically, you can use it by modifying the file extension, email username and password. However, if you only modify it like this, an error will be reported when accessing the test page. I don’t know the official demo. How can there be such an error? It actually calls an undefined function and has some unnecessary components. We just want to test whether the email can be sent normally, so I changed it to:

<&#63;php
    // example on using PHPMailer with GMAIL
    include("class.phpmailer.php");
    include("class.smtp.php"); // note, this is optional - gets called from main class if not already loaded
    $mail       = new PHPMailer();
    $body       = "test";
    $mail->IsSMTP();
    $mail->SMTPAuth  = true;         // enable SMTP authentication
    $mail->SMTPSecure = "ssl";         // sets the prefix to the servier
    $mail->Host    = "smtp.gmail.com";   // sets GMAIL as the SMTP server
    $mail->Port    = 465;          // set the SMTP port
    $mail->Username  = "myname@gmail.com"; // GMAIL username
    $mail->Password  = "mypassword";      // GMAIL password
    $mail->From    = "myname@gmail.com";
    $mail->FromName  = "Webmaster";
    $mail->Subject  = "This is the subject";
    $mail->AltBody  = "This is the body when user views in plain text format"; //Text Body
    $mail->WordWrap  = 50; // set word wrap
    $mail->MsgHTML($body);
    $mail->AddReplyTo("myname@gmail.com","Webmaster");
    $mail->AddAddress("myname@gmail.com","First Last");
    $mail->IsHTML(true); // send as HTML
    if(!$mail->Send()) {
     echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
     echo "Message has been sent";
    }
&#63;>

It turns out that when accessing this page, an error is still reported, which is really frustrating. Why can’t the official demo be run?

At this time, I suddenly remembered that there is a file named Note_for_SMTP_debugging.txt under PHPMailer_v5.1/docs. Now I am worried about not being able to connect to the SMTP server. I might as well take a look at the debugging methods provided in it.

When I opened the file and read the first line, my eyes lit up. This is exactly what I needed! In fact, the method of use is also very simple, just use

$mail->IsSMTP();

Insert before

$mail->SMTPDebug = 1;

You can get more detailed error information when reporting an error. What a good thing^_^

After modifying it like this, I got more detailed instructions when visiting the page - "SMTP -> ERROR: Failed to connect to server: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP? (28593608)".

That’s it, so I opened my php configuration file (C://Windows/php.ini) and searched for ssl, and sure enough I found an extension about ssl

;extension=php_openssl.dll

它没有被打开。去掉其前面用于注释的“;”,然后重启服务器,再次访问测试页面use_gmail.php,仍然是同样的错误提示。

没办法了,我上网查了一下关于php以及apache的ssl配置的文章,发现仅仅是将ssl扩展模块开启是不够的,还要对openssl进行配置,在Windows环境下配置方法倒是很简单——找到php安装目录下的ssleay32.dll和libeay32.dll,将这二者复制到windows下的system32目录中即可(在php.ini中开启extension=php_openssl.dll还是必要的)。当然,不想“污染”system32目录的同志们可以用修改环境变量的方法,只要让ssleay32.dll和libeay32.dll在系统路径下就可以了。(如果你使用的不是winidows操作系统,请上网查找针对你的操作系统的配置ssl的方法,应该不难找到)

这回再访问use_gmail.php发现可以成功发送了!

在此基础上,我们的phplist的问题也可以解决了:用新版phpmailer中的class.phpmailer.php和class.smtp.php覆盖lists/admin/phpmailer中的对应文件,然后修改lists/admin/class.phplistmailer.php中36行左右处的

$this->SMTPAuth = true;
$this->Helo = getConfig("website");
$this->Host = PHPMAILERHOST;

为:

$this->IsSMTP();            # Add
$this->SMTPAuth = true;
$this->SMTPSecure = "ssl";       # Add
$this->Helo = getConfig("website");
$this->Host = PHPMAILERHOST;
$this->Port = 465            # Add

其中phpmailer默认端口号为25,是大多数smtp服务器的端口号,但是gmail使用的端口号是465,所以要重新设置。

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php操作office文档技巧总结(包括word,excel,access,ppt)》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn