1. Log in to the SMTP server
First use the online method (here use 163 mailbox, smtp.163.com is the SMTP server address, 25 is the port number):
Import Smtplibserver = Smtplib. SMTP (' smtp.163.com ', ' Server.login ') (' j_hao104@163.com ', ' Password ') Traceback (most recent call last): File "C:/python /t.py ", line 192, in
server.login (' j_hao104@163.com ', ' password ') File" C:\Python27\lib\smtplib.py ", Line 622, in login raise Smtpauthenticationerror (Code, RESP) smtplib. Smtpauthenticationerror: (535, ' error:authentication failed ')
Found to return:
Smtplib. Smtpauthenticationerror: (535, ' error:authentication failed ')
, prompting for validation failure.
Python does not support the SMTP service, or the service does not open. But I think of the last time I used foxmail login to my 163 mailbox, the mailbox password is the right or prompt me password error, the Final solution is: like QQ and 163 mailbox now have a client password, with a third-party login with a client password to log on only line, Python is so, So go to set the client password, and then log in with the client password.
Import Smtplibserver = Smtplib. SMTP (' smtp.163.com ', +) server.login (' j_hao104@163.com ', ' Clientpassword ')
This returns the login success prompt:
(235, ' authentication successful ')
2. Send mail
First use the code given online:
Import smtplibfrom email.mime.text Import mimetextserver = Smtplib. SMTP (' smtp.163.com ', ' Server.login ') (' j_hao104@163.com ', ' clientpassword ') msg = Mimetext (' Hello, send by Python ... '), ' Plain ', ' utf-8 ') server.sendmail (' j_hao104@163.com ', [' 946150454@qq.com '], msg.as_string ())
When constructing a Mimetext object, the first parameter is the message body, the second parameter is the MIME subtype, and the last is the encoding method.
SendMail is the e-mail method, the first parameter is the sender mailbox, the second parameter is the recipient mailbox, is a list, the representative can be sent to more than one person, as_string is the Mimetext object into Str.
But the results do not get the results online:
But:
Traceback (most recent): File "c:/python/t.py", line 195, in
server.sendmail (' j_hao104@163.com ', [' 946150454@qq.com '], msg.as_string ()) File "C:\Python27\lib\smtplib.py", line 746, SendMail raise Smtpdataerror (Code, RESP) smtplib. Smtpdataerror: (554, ' DT:SPM 163 SMTP11,D8COWEDPDKE427JW_WQIAA--. 4996s2 1454562105,please See http://mail.163.com/ help/help_spam_16.htm?ip=171.221.144.51&hostid=smtp11&time=1454562105 ')
Online A check only know: Smtplib. Smtpdataerror: (554, ' DT:SPM 163 smtp11 ... The error is because the envelope sender and the letter hair person do not match. You can see that there are no senders and themes in the picture, so you need to make the following modifications to the code:
Import smtplibfrom email.header import headerfrom email.mime.text Import mimetextserver = Smtplib. SMTP (' smtp.163.com ', ' Server.login ') (' j_hao104@163.com ', ' clientpassword ') msg = Mimetext (' Hello, send by Python ... '), ' Plain ', ' utf-8 ') msg[' from '] = ' j_hao104@163.com
' msg[' Subject '] = Header (U ' text ', ' UTF8 '). Encode () msg[' to '] = U ' Flywheel sea
' server.sendmail (' j_hao104@163.com ', [' 946150454@qq.com '], msg.as_string ())
So you can send a successful email.
The specific information in MSG can be sent under the general e-mail message test
3. Reference example
Import smtplibfrom email.mime.text Import mimetextto_list = [' 123@123.com ', ' 456@456.com ']server_host = ' smtp.163.com ' Username = ' Your email account ' Password = ' Your mailbox password ' def send (to_list, sub, content): ' ' :p Aram to_list: Recipient mailbox :p Aram Sub: Message title :p Aram Content: Contents " me =" Manager "+" < "+ username +" > " # _subtype can be set to HTML, default is plain m sg = mimetext (content, _subtype= ' html ') msg[' Subject '] = Sub msg[' from ' = Me- msg[' to '] = '; '. Join (To_list) try: server = Smtplib. SMTP () server.connect (server_host) server.login (username, password) server.sendmail (Me, To_list, Msg.as_string ()) server.close () except Exception as e: print str (e) if __name__ = = ' __main__ ': Send (To_list, "This is a mail", "Hello, It ' s test email.
")