>  기사  >  백엔드 개발  >  Python에서 다양한 유형의 이메일을 보내는 주요 방법에 대한 자세한 설명

Python에서 다양한 유형의 이메일을 보내는 주요 방법에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-02-23 16:38:341596검색

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 기반 메시지 문서를 포함한 이메일 메시지를 처리하는 데 사용됩니다. 이러한 모듈을 사용하여 이메일 내용을 정의하는 것은 매우 간단합니다. 여기에 포함된 클래스는 다음과 같습니다(자세한 소개는 http://www.php.cn/에서 확인할 수 있습니다):

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=&#39;html&#39;,_charset=&#39;gb2312&#39;)  #创建一个实例,这里设置为html格式邮件
  msg[&#39;Subject&#39;] = sub  #设置主题
  msg[&#39;From&#39;] = me 
  msg[&#39;To&#39;] = ";".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__ == &#39;__main__&#39;: 
  if send_mail(mailto_list,"hello","<a href=&#39;http://www.cnblogs.com/xiaowuyi&#39;>小五义</a>"): 
    print "发送成功" 
  else: 
    print "发送失败"

3、发送带附件的邮件

发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。 

# -*- coding: cp936 -*-
&#39;&#39;&#39;
发送带附件邮件
&#39;&#39;&#39;

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib

#创建一个带附件的实例
msg = MIMEMultipart()

#构造附件1
att1 = MIMEText(open(&#39;d:\\123.rar&#39;, &#39;rb&#39;).read(), &#39;base64&#39;, &#39;gb2312&#39;)
att1["Content-Type"] = &#39;application/octet-stream&#39;
att1["Content-Disposition"] = &#39;attachment; filename="123.doc"&#39;#这里的filename可以任意写,写什么名字,邮件中显示什么名字
msg.attach(att1)

#构造附件2
att2 = MIMEText(open(&#39;d:\\123.txt&#39;, &#39;rb&#39;).read(), &#39;base64&#39;, &#39;gb2312&#39;)
att2["Content-Type"] = &#39;application/octet-stream&#39;
att2["Content-Disposition"] = &#39;attachment; filename="123.txt"&#39;
msg.attach(att2)

#加邮件头
msg[&#39;to&#39;] = &#39;YYY@YYY.com&#39;
msg[&#39;from&#39;] = &#39;XXX@XXX.com&#39;
msg[&#39;subject&#39;] = &#39;hello world&#39;
#发送邮件
try:
  server = smtplib.SMTP()
  server.connect(&#39;smtp.XXX.com&#39;)
  server.login(&#39;XXX&#39;,&#39;XXXXX&#39;)#XXX为用户名,XXXXX为密码
  server.sendmail(msg[&#39;from&#39;], msg[&#39;to&#39;],msg.as_string())
  server.quit()
  print &#39;发送成功&#39;
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[&#39;From&#39;] = "XXX@XXX.com"
  msg[&#39;To&#39;] = "YYY@YYY.com"
  msg[&#39;Subject&#39;] = "hello world"


  txt = MIMEText("这是中文的邮件内容哦",&#39;plain&#39;,&#39;gb2312&#39;)   
  msg.attach(txt)
  

  file1 = "C:\\hello.jpg"
  image = MIMEImage(open(file1,&#39;rb&#39;).read())
  image.add_header(&#39;Content-ID&#39;,&#39;<image1>&#39;)
  msg.attach(image)
  
  
  server = smtplib.SMTP()
  server.connect(&#39;smtp.XXX.com&#39;)
  server.login(&#39;XXX&#39;,&#39;XXXXXX&#39;)
  server.sendmail(msg[&#39;From&#39;],msg[&#39;To&#39;],msg.as_string())
  server.quit()
  
if __name__ == "__main__":
  AutoSendMail()

利用MIMEimage发送图片,原本是想图片能够在正文中显示,可是代码运行后发现,依然是以附件形式发送的,希望有高手能够指点一下,如何可以发送在正文中显示的图片的邮件,就是图片是附件中存在,但同时能显示在正文中,具体形式如下图。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHP中文网。

更多详解python发送各类邮件的主要方法相关文章请关注PHP中文网!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.