python使用阿里云邮箱POP3发邮件

无法成功发送邮件,阿里云邮箱已开启POP。

#!/usr/bin/python

-*- coding: UTF-8 -*-

import poplib
from email.mime.text import MIMEText
from email.utils import formataddr

my_sender='aaaaaaa@aliyun.com' # 发件人邮箱账号
my_pass = 'bbbbbbb' # 必须开启POP3/POP3服务
my_user='ccccccc@dddddd.cn' # 收件人邮箱账号
def mail():
ret=True
try:
msg=MIMEText('填写邮件内容','plain','utf-8')
msg['From']=formataddr(["FromRunoob",my_sender]) # 括号里的对应发件人邮箱昵称、发件人邮箱账号
msg['To']=formataddr(["FK",my_user]) # 括号里的对应收件人邮箱昵称、收件人邮箱账号
msg['Subject']="菜鸟教程发送邮件测试" # 邮件的主题,也可以说是标题

    server=poplib.POP3_SSL("pop3.mxhichina.com", 995)  
    server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
    server.sendmail(my_sender,[my_user,],msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
    server.quit()  # 关闭连接
except Exception:  # 如果 try 中的语句没有执行,则会执行下面的 ret=False
    ret=False
return ret

ret=mail()
if ret:
print("邮件发送成功")
else:
print("邮件发送失败")

pop是收邮件的,发邮件需要smtp服务器

感谢,这回改成收邮件。这回报的错是“poplib.error_proto: b'-ERR [AUTH] Invalid login'”

#!/usr/bin/python

-*- coding: UTF-8 -*-

import os, sys, string
import poplib

pop3服务器地址

host = "pop3.mxhichina.com"

用户名

username = "aaaaaaaaa@aliyun.com"

密码

password = "bbbbbbb"

端口

port = "995"

创建一个pop3对象,这个时候实际上已经连接上服务器了

pp = poplib.POP3_SSL(host,port)

设置调试模式,可以看到与服务器的交互信息

pp.set_debuglevel(1)

向服务器发送用户名

pp.user(username)

向服务器发送密码

pp.pass_(password)

获取服务器上信件信息,返回是一个列表,第一项是一共有多上封邮件,第二项是共有多少字节

ret = pp.stat()
print(ret)

需要取出所有信件的头部,信件id是从1开始的。

for i in range(1, ret[0]+1):
# 取出信件头部。注意:top指定的行数是以信件头为基数的,也就是说当取0行,
# 其实是返回头部信息,取1行其实是返回头部信息之外再多1行。
mlist = pp.top(i, 0)
print ('line: ', len(mlist[1]))

列出服务器上邮件信息,这个会对每一封邮件都输出id和大小。不象stat输出的是总的统计信息

ret = pp.list()
print (ret)

取第一封邮件完整信息,在返回值里,是按行存储在down[1]的列表里的。down[0]是返回的状态信息

down = pp.retr(1)
print ('lines:', len(down))

输出邮件

for line in down[1]:
print (line)

退出

pp.quit()