raid吾
2018-11-19 09:34
采纳率: 0%
浏览 3.7k

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("邮件发送失败")

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • threenewbee 2018-11-19 12:32

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

    评论
    解决 无用
    打赏 举报
  • raid吾 2018-11-19 12:58

    感谢,这回改成收邮件。这回报的错是“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()

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题