Python의 이메일 모듈을 사용하면 이메일을 더 쉽게 처리할 수 있습니다. 이 글에서는 Python에서 다양한 유형의 이메일을 보내는 주요 방법을 주로 소개합니다.
Python의 이메일 모듈을 사용하면 이메일을 더 쉽게 처리할 수 있습니다. 오늘은 이메일을 보내는 구체적인 방법을 집중적으로 알아보고 전문가에게 조언을 구하겠습니다.
1. 관련 모듈 소개
Smtplib과 email 모듈은 주로 이메일을 보내는 데 사용됩니다.
1. smtplib 모듈
smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])
SMTP 클래스 생성자 는 SMTP 서버와의 연결을 나타냅니다. 이 연결을 통해 SMTP 서버에 명령을 보내고 관련 작업(예: 로그인, 이메일 보내기)을 수행할 수 있습니다. 모든 매개변수는 선택사항입니다.
host: SMTP 서버 호스트 이름
port: SMTP 서비스 포트, 기본값은 25입니다. SMTP 객체 생성 시 이 두 매개변수가 제공되면 초기화 연결 방법 중에 자동으로 호출됩니다. 서버에 연결합니다.
smtplib 모듈은 SMTP_SSL 클래스와 LMTP 클래스도 제공하며, 그 동작은 기본적으로 SMTP와 동일합니다.
smtplib.SMTP에서 제공하는 메서드:
SMTP.set_debuglevel(level): 디버그 모드인지 여부를 설정합니다. 기본값은 비디버깅 모드인 False입니다. 즉, 디버깅 정보가 출력되지 않습니다.
SMTP.connect([host[, port]]): 지정된 smtp 서버에 연결합니다. 매개변수는 각각 smpt 호스트와 포트를 나타냅니다. 참고: 호스트 매개변수(예: smpt.yeah.net:25)에 포트 번호를 지정할 수도 있으므로 포트 매개변수를 제공할 필요가 없습니다.
SMTP.docmd(cmd[, argstring]): smtp 서버에 명령을 보냅니다. 선택적 매개변수 argstring은 명령어의 매개변수를 나타냅니다.
SMTP.helo([hostname]): "helo" 명령을 사용하여 서버에 대한 ID를 확인합니다. 이는 SMTP 서버에 "내가 누구인지"를 알려주는 것과 같습니다.
SMTP.has_extn(name): 지정된 이름이 서버 메일링 리스트에 존재하는지 확인합니다. 보안상의 이유로 SMTP 서버는 종종 이 명령을 차단합니다.
SMTP.verify(address): 지정된 이메일 주소가 서버에 존재하는지 확인합니다. 보안상의 이유로 SMTP 서버는 종종 이 명령을 차단합니다.
SMTP.login(사용자, 비밀번호): smtp 서버에 로그인합니다. 이제 거의 모든 SMTP 서버는 이메일 전송을 허용하기 전에 사용자 정보가 합법적인지 확인해야 합니다.
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]): 메일을 보냅니다. 여기서 세 번째 매개변수에 주의하세요. msg는 이메일을 나타내는 문자열입니다. 이메일은 일반적으로 제목, 보낸 사람, 받는 사람, 이메일 내용, 첨부 파일 등으로 구성됩니다. 이메일을 보낼 때 메시지 형식에 주의하세요. 이 형식은 smtp 프로토콜에 정의된 형식입니다.
SMTP.quit(): SMTP 서버와의 연결을 끊습니다. 이는 "quit" 명령을 보내는 것과 같습니다. (smtp.close()는 많은 프로그램에서 사용됩니다. quit과 quit의 차이점을 구글링했는데 답을 찾을 수 없었습니다.)
2. 이메일 모듈
emial 모듈은 MIME 및 기타 RFC 2822 기반 메시지 문서를 포함한 이메일 메시지를 처리하는 데 사용됩니다. 이러한 모듈을 사용하여 이메일 내용을 정의하는 것은 매우 간단합니다. 여기에 포함된 클래스는 다음과 같습니다(자세한 소개는 //m.sbmmt.com/에서 확인할 수 있습니다):
class email.mime.base.MIMEBase(_maintype, _subtype, **_params): 이것은 MIME의 기본 클래스입니다. 일반적으로 사용 시 인스턴스를 생성할 필요가 없습니다. 여기서 _maintype은 텍스트 또는 이미지와 같은 콘텐츠 유형입니다. _subtype은 일반 또는 gif와 같은 사소한 콘텐츠 유형입니다. **_params는 Message.add_header()에 직접 전달되는 사전입니다.
class email.mime.multipart.MIMEMultipart([_subtype[,boundary[, _subparts[, _params]]]]: 여러 MIME 객체의 모음인 MIMEBase의 하위 클래스, _subtype의 기본값은 혼합되어 있습니다. .boundary는 MIMEMultipart의 경계입니다.
class email.mime.application.MIMEApplication(_data[, _subtype[, _encoder[, **_params]]]): MIMEMultipart의 하위 클래스입니다. .
class email.mime.audio.MIMEAudio(_audiodata[, _subtype[, _encoder[, **_params]]]): MIME 오디오 객체
class email.mime.image. MIMEImage(_imagedata[, _subtype[, _encoder[, **_params]]]): MIME 바이너리 파일 개체
class email.mime.message.MIMEMessage(_msg[, _subtype]): 특정 메시지 인스턴스 . , 사용법은 다음과 같습니다:
msg=mail.Message.Message() #一个实例 msg['to']='XXX@XXX.com' #发送到哪里 msg['from']='YYY@YYYY.com' #自己的邮件地址 msg['date']='2012-3-16' #时间日期 msg['subject']='hello world' #邮件主题
class email.mime.text.MIMEText(_text[, _subtype[, _charset]]): MIME 텍스트 객체 , 여기서 _ Text는 이메일 콘텐츠이고, _subtype 이메일 유형은 text/plain(일반 텍스트 이메일), html/plain(html 이메일), _charset 인코딩(gb2312 등)일 수 있습니다.
두 개 이상.
1. 일반 문자 이메일
일반 문자 이메일 전송의 핵심은 설정하는 것입니다. MIMEText의 _subtype을 일반으로 가져옵니다. 먼저 smtplib 및 mimetext를 가져옵니다. smtplib.smtp 인스턴스를 생성하고 이메일 smtp 서버에 연결한 후 로그인 후 보냅니다. 구체적인 코드는 다음과 같습니다. (python2.6에서 구현됨)
아아아아2. HTML 이메일 보내기
与text邮件不同之处就是将将MIMEText中_subtype设置为html。具体代码如下:(python2.6下实现)
# -*- coding: utf-8 -*- ''' 发送html文本邮件 ''' import smtplib from email.mime.text import MIMEText mailto_list=["YYY@YYY.com"] mail_host="smtp.XXX.com" #设置服务器 mail_user="XXX" #用户名 mail_pass="XXXX" #口令 mail_postfix="XXX.com" #发件箱的后缀 def send_mail(to_list,sub,content): #to_list:收件人;sub:主题;content:邮件内容 me="hello"+"<"+mail_user+"@"+mail_postfix+">" #这里的hello可以任意设置,收到信后,将按照设置显示 msg = MIMEText(content,_subtype='html',_charset='gb2312') #创建一个实例,这里设置为html格式邮件 msg['Subject'] = sub #设置主题 msg['From'] = me msg['To'] = ";".join(to_list) try: s = smtplib.SMTP() s.connect(mail_host) #连接smtp服务器 s.login(mail_user,mail_pass) #登陆服务器 s.sendmail(me, to_list, msg.as_string()) #发送邮件 s.close() return True except Exception, e: print str(e) return False if __name__ == '__main__': if send_mail(mailto_list,"hello","<a href='http://www.cnblogs.com/xiaowuyi'>小五义</a>"): print "发送成功" else: print "发送失败"
3、发送带附件的邮件
发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。
# -*- coding: cp936 -*- ''' 发送带附件邮件 ''' from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart import smtplib #创建一个带附件的实例 msg = MIMEMultipart() #构造附件1 att1 = MIMEText(open('d:\\123.rar', 'rb').read(), 'base64', 'gb2312') att1["Content-Type"] = 'application/octet-stream' att1["Content-Disposition"] = 'attachment; filename="123.doc"'#这里的filename可以任意写,写什么名字,邮件中显示什么名字 msg.attach(att1) #构造附件2 att2 = MIMEText(open('d:\\123.txt', 'rb').read(), 'base64', 'gb2312') att2["Content-Type"] = 'application/octet-stream' att2["Content-Disposition"] = 'attachment; filename="123.txt"' msg.attach(att2) #加邮件头 msg['to'] = 'YYY@YYY.com' msg['from'] = 'XXX@XXX.com' msg['subject'] = 'hello world' #发送邮件 try: server = smtplib.SMTP() server.connect('smtp.XXX.com') server.login('XXX','XXXXX')#XXX为用户名,XXXXX为密码 server.sendmail(msg['from'], msg['to'],msg.as_string()) server.quit() print '发送成功' except Exception, e: print str(e)
4、利用MIMEimage发送图片
# -*- coding: cp936 -*- import smtplib import mimetypes from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.image import MIMEImage def AutoSendMail(): msg = MIMEMultipart() msg['From'] = "XXX@XXX.com" msg['To'] = "YYY@YYY.com" msg['Subject'] = "hello world" txt = MIMEText("这是中文的邮件内容哦",'plain','gb2312') msg.attach(txt) file1 = "C:\\hello.jpg" image = MIMEImage(open(file1,'rb').read()) image.add_header('Content-ID','<image1>') msg.attach(image) server = smtplib.SMTP() server.connect('smtp.XXX.com') server.login('XXX','XXXXXX') server.sendmail(msg['From'],msg['To'],msg.as_string()) server.quit() if __name__ == "__main__": AutoSendMail()
利用MIMEimage发送图片,原本是想图片能够在正文中显示,可是代码运行后发现,依然是以附件形式发送的,希望有高手能够指点一下,如何可以发送在正文中显示的图片的邮件,就是图片是附件中存在,但同时能显示在正文中,具体形式如下图。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHP中文网。
更多详解python发送各类邮件的主要方法相关文章请关注PHP中文网!