This article describes the configuration method of phplist and phpmailer to send 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 Configuration Method of PHP Bulk Email System phplist". 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 send emails through gmail according to the configuration method in "Detailed Summary of Configuration Methods of PHP Bulk Email System phplist". When sending test emails, phplist will report that the email failed to be sent, and there will be an error message in the event log (eventlog)." Mailer Error: The following From address failed:...", which means 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 SSL verification problem, so I took a look 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 first, so I changed it to:
<?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"; } ?>
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
It is not opened. Remove the ";" used for comments in front of it, then restart the server and visit the test page use_gmail.php again, but the same error message still appears.
There is no other way. I checked online for articles about SSL configuration of PHP and Apache, and found that it is not enough to just enable the SSL extension module. OpenSSL must also be configured. The configuration method is very simple in the Windows environment. ——Find ssleay32.dll and libeay32.dll in the PHP installation directory, and copy them to the system32 directory under Windows (it is still necessary to turn on extension=php_openssl.dll in php.ini). Of course, those who don't want to "pollute" the system32 directory can modify the environment variables, as long as ssleay32.dll and libeay32.dll are in the system path. (If you are not using a winidows operating system, please go online to find the method of configuring SSL for your operating system. It should not be difficult to find)
This time I visited use_gmail.php and found that it could be sent successfully!
在此基础上,我们的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程序设计有所帮助。