When writing a function for sending emails in PHP, a very strange problem will occur, that is:
Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in .......
Of course, this red is not displayed on the web page, it is just for illustration, but you can set the displayed color. Well, this is left to you to consider.
I searched for relevant answers through the Internet, including related technical blogs, and everyone explained the solution very simply. Most of them just mentioned modifying the [mail function] function in php.ini to open the related functions of SMTP. That’s it, here are the detailed modifications:
[mail function]
SMTP = localhost
smtp_port = 25
sendmail_from = youremailUsual@domin.com
;It is necessary to note here that this email is from the From side.
sendmail_path = ""
;It is empty at first, and will be explained later.
mail_add_x_header = on
;This is on by default, no need to change
At this point, after the modification is completed, restart apache. Of course, I did this operation under CMD. Speaking of this operation, I also made a little joke. How stupid i am!
After restarting, refresh the page and the error still exists.
I'm stuck here. IIS (default server for Windows) was mentioned in stackoverflow. I can't find this item under Control Panel - Administrative Tools. Because it's win7, I turned it on under Add and Remove Programs. Yes, pay attention to the operation. You can find it under the management tool later. Double-click to open it. At this time, you are very excited to see the SMTP item. Double-click to open it and configure the relevant parameters, as shown in the screenshot:
Correction: I forgot to repost the picture here, so I apologize! Correction No. 7-5.
To be honest, this step was a bit stupid. The above are the options for ASP.net, don’t worry about PHP. [It didn’t work anyway].
After learning from the painful experience, I checked Wikipedia for a detailed explanation of the SMTP protocol. Click Here: Simple Mail Protocol
Come back and continue to modify, [mail function], as follows:
; Take the setting of 126 mailbox as an example
SMTP = smtp.126.com
smtp_port = 25
sendmail_from = my126EmailAddress@126.com
sendmail_path = ""
mail_add_x_header = on
At the same time, the value of the $from variable in the program was modified to maintain consistency.
[Because of the previous test, the phpinfo() function was added to the program. After execution, search for the mail item on the page, and you will find that there will be a Localhost Value and a master Value. Of course, this is easy to understand. The Localhost Value refers to the value in your program. The set value, master Value is the setting of php.ini]
After execution, the magical error disappeared, but the following error occurred:
mail(): SMTP server response: 553 You are not authorized to send mail, authentication is required aaf353e4-8ac5-416e-9cd5-6b54fc592764
Afterwards, I changed other email addresses, such as QQ, Gamil, etc., and the errors were as shown above. After reading a familiar word authorized, I understood what it meant.
It seems that we are not far from success at this step. I remember that when I used the client to configure mailbox users, the last step would ask you whether you need to turn on "server authentication". Finally, I accidentally found a file package called sendmail. Download it. The address is as follows: sendmail
After that, it is best to create a new folder in the root directory of PHP and name it: sendmail, then put the compressed package in it, unzip it, and modify a file called sendmail.ini. The modifications are as follows:
;take the fomus email provider in China 126 for example
[sendmail]
smtp_server= smtp.126.com
smtp_port=25
default_domin =126.com
auth_username= strings in your email address before char '@'
auth_password= your password which allow you to login in your email-box
hostname= 126.com
After that, you have to modify php.ini, still in the same place:
SMTP = smtp.126.com
;The same is true if it is changed to localhost here, and other options remain unchanged.
smtp_port = 25
sendmail_from = my126EmailAddress@126.com
sendmail_path = "your sendmail path/sendemail.exe -t "
;Of course the first half of this path must include the root directory of your PHP installation. Replace "" with "/", I think it is a must.
mail_add_x_header = on
Now that the configuration is complete, restart your apache, refresh the page, and the error will disappear, because the $to set in the program is your own 126 and QQ mailbox, and of course it will be sent cyclically.
When I saw the Sanfeng email prompt popping up on QQ in the lower right corner of the desktop, I know that I resolve it. The content of the opened email was exactly the same as what I entered on the page, and some of the content was read from the local database. .
Author: Tian Haoyu