- qq邮箱需要使用ssl连接, 其次需要对邮箱进行配置,开启pop3/smtp 和imap/smtp服务,并申请授权码用于替代登录密码。另外,端口号配置看这里。
- scrapy的mail功能只有在scrapy项目中启动才有效, 单独的调用无效(这是测试结论)
方法一: smtplib模块
一般形式(1)
import smtplib from email.mime.text import MIMEText _user = "qq号@qq.com" _pwd = "" _to = "qq号@qq.com" msg = MIMEText("Test") msg["Subject"] = "don't panic" msg["From"] = _user msg["To"] = _to try: s = smtplib.SMTP_SSL("smtp.qq.com", 465) s.login(_user, _pwd) s.sendmail(_user, _to, msg.as_string()) s.quit() print "Success!" except smtplib.SMTPException, e: print "Falied,%s" % e pass
一般形式(2)
import smtplib from email.mime.text import MIMEText from email.header import Header sender = 'qq号@qq.com' receiver = 'qq号@qq.com' subject = 'python email test' smtpserver = 'smtp.qq.com' username = 'qq号' password = '*******'# 这里填写授权码 msg = MIMEText('Hello Python', 'text', 'utf-8') msg['Subject'] = Header(subject, 'utf-8') smtp = smtplib.SMTP_SSL() smtp.connect(smtpserver, port=465) smtp.login(username, password) smtp.sendmail(sender, receiver, msg.as_string()) smtp.quit()
交互形式
import smtplib from getpass import getpass def prompt(prompt): return input(prompt).strip() fromaddr = prompt("From: ") toaddrs = prompt("To: ").split() subject = prompt("Subject: ") print("Enter message, end with ^D (Unix) or ^Z (Windows):") # Add the From: To: and Subject: headers at the start! msg = ("From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" % (fromaddr, ", ".join(toaddrs), subject)) while True: try: line = input() except EOFError: break if not line: break msg = msg + line print("Message length is", len(msg)) server = smtplib.SMTP_SSL('smtp.qq.com', port=465) # 如果是其他的服务,只需要更改 host 为对应地址,port 对对应端口即可 # server = smtplib.SMTP_SSL(host='smtp.qq.com', port=465) server.set_debuglevel(1) # 开启调试,会打印调试信息 print("--- Need Authentication ---") # username = prompt("Username: ") # password = getpass("Password: ") username = "qq号" password = "" server.login(username, password) server.sendmail(fromaddr, toaddrs, msg) server.quit()
方法二: scrapy 的mail功能
嵌在scrapy爬虫代码中才有效,单独调用无效
from scrapy.mail import MailSender mailer = MailSender( smtphost="smtp.qq.com", # 发送邮件的服务器 smtpport=465, # 端口号 smtpuser="qq号@qq.com", # 用户名 smtppass="×××××", # 发送邮箱的密码不是你注册时的密码,而是授权码!!!切记! mailfrom="qq号@qq.com", # 邮件发送者 smtpssl=True, ) body = u""" this is a test of scrapy mail sender, it's my pleasure to receive your reaction.""" subject = u'test of scrapy mail moudle!!!' # 如果说发送的内容太过简单的话,很可能会被当做垃圾邮件给禁止发送 mailer.send(to=["qq号@qq.com", ], subject=subject, body=body)