python收發郵件的方法

def acptmail():
  email = 'xxx@163.com' #input('Email:')
  password = 'xxx' #input('Password: ')
  pop3_server = 'pop3.163.com' html

#下載原始郵件
server = poplib.POP3(pop3_server)
server.set_debuglevel(0)
#print(server.getwelcome().decode('utf-8'))
server.user(email)
server.pass_(password)
#打印郵件數量和佔用空間
#print('Message: %s, Size: %s' % server.stat())
resp, mails, octets = server.list()
#print(mails)

#解析郵件
index = len(mails) 服務器

#server.tetr(int),返回最頂部的,即郵箱中最新接收到的郵件
resp, lines, octets = server.retr(index)
msg_content = b'\r\n'.join(lines).decode('utf-8')
msg = Parser().parsestr(msg_content)
#print_info(msg)編碼

content = msg.get_payload(decode = True)
msgfrom = msg.get('From', '') 
msgsub = msg.get('Subject', '')#即郵件中的「主題」一欄.net

  發送郵件時,郵件服務器會檢測是否爲垃圾郵件,或惡意郵件等,沒有經過其過濾的話就會報DataError,debug

此時須要規範發送內容和格式,以上程序的格式能夠發送,若是仍是不能發送,就須要改動一下郵件內容,使其code

看起來「正經」一點 server

 

def send_mail(mailaddr):htm

#msg=email.mime.multipart.MIMEMultipart()
#以這種格式發送簡單文本,先發送內容再給msg的各項屬性賦值
content="hello!" #以上是郵件的內容
msg=email.mime.text.MIMEText(content)
msg['from']='xxx@163.com' #發送端地址
msg['to']=mailaddr #接受端地址
msg['subject']=Header('hey boy!','utf-8') #郵件的標題

#msg.attach(txt)

#smtp=smtplib
smtp=smtplib.SMTP() #建立一個SMTP對象
smtp.connect('smtp.163.com') #使用connect方法連接到新浪郵件服務器的25號端口
smtp.login('xxx@163.com','xxx') #登入發送端須要帳號驗證
smtp.sendmail('xxx@163.com',mailaddr,str(msg)) #郵件發送,括號內的順序是(發送端,接收端,文件內容)
smtp.close()對象

收發郵件的最大問題,就是編碼轉換的問題,以上程序只能收取簡單的字符串,如果正常郵件,極可能會有亂碼問題,關於這個問題,有大神已經寫好編碼判斷和轉換的方法,貼在下面:http://blog.csdn.net/kornberg_fresnel/article/details/51227761blog

另外,找到一篇發送各類郵件的方法:http://www.cnblogs.com/UnGeek/p/5830525.html

相關文章
相關標籤/搜索