利用Python发邮件

 

from email.mime.text import MIMEText
from email.header import Header
from email.utils import parseaddr, formataddr
import smtplib

def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr((Header(name, 'utf-8').encode(), addr))

from_addr = input("From: ")
password = input("Password: ")
to_addr = input("To: ")
smtp_server = input("SMTP Server: ")

msg = MIMEText("hello, send by Python...", 'plain', 'utf-8')
msg["From"] = _format_addr('Python爱好者<%s>' %from_addr)
msg['To'] = _format_addr("管理员<%s>" % to_addr)
msg['Subject'] = Header('来自SMTP的问候...', 'utf-8').encode()

server = smtplib.SMTP(smtp_server, 25)
server.login(from_addr, 'abc123,')
server.sendmail(from_addr, to_addr, msg.as_string())
server.quit()

如果是发送 html 邮件,只需要做如下修改即可:

 

msg = MIMEText("<html><body><h1>Hello</h1>"+"<p>send by Python</p> " + "</body></html>", 'html', 'utf-8')

发送带附件的邮件:

 

from email.mime.text import MIMEText
from email.header import Header
from email.utils import parseaddr, formataddr
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
import smtplib
from email import encoders

def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr((Header(name, 'utf-8').encode(), addr))

from_addr = input("From: ")
password = input("Password: ")
to_addr = input("To: ")
smtp_server = input("SMTP Server: ")

msg = MIMEMultipart()
msg["From"] = _format_addr('Python爱好者<%s>' %from_addr)
msg['To'] = _format_addr("管理员<%s>" % to_addr)
msg['Subject'] = Header('来自SMTP的问候...', 'utf-8').encode()
msg.attach(MIMEText('send with file...', 'plain', 'utf-8'))
with open(r'C:\Users\Administrator\Downloads\aa.jpeg','rb') as f:
    mime = MIMEBase('image', 'jpeg', filename='aa.jpeg')
    mime.add_header("Content-Disposition", 'attachment', filename='aa.jpeg')
    mime.add_header('Content-ID', '<0>')
    mime.add_header('X-Attachment-ID', '0')
    mime.set_payload(f.read())
    encoders.encode_base64(mime)
    msg.attach(mime)

server = smtplib.SMTP(smtp_server, 25)
server.login(from_addr, 'abc123,')
server.sendmail(from_addr, to_addr, msg.as_string())
server.quit()

如果需要发送的附件图片能在邮件正文中显示,可以修改:

 

msg.attach(MIMEText('<html><body><h1>Hello</h1>' + '<p><img src="cid:0"></p>' + "</body></html>", 'html', 'utf-8'))

 

 

 

 

posted @ 2020-11-08 14:30  Peter_Yi  阅读(125)  评论(0)    收藏  举报