zoukankan      html  css  js  c++  java
  • smtp outlook邮件发送非授权码模式

    1.起因:send fail SMTP AUTH extension not supported by server. 使用端口25 和587均失效出现此问题

    首先前往outlook修改设置pop和IMAP开启,允许第三方调用:https://outlook.live.com/owa/?path=/options/popandimap

    【在使用QQ邮箱IOS端的APP添加outlook邮箱时,显示IMAP没有开启】是否意指当您在iOS手机设备中进行配置微软帐户至第三方域名邮箱(QQ邮箱)时,

    系统提示Outlook邮箱中的IMAP并未开启?

    1. 请您前往网页版Outlook邮箱的【POP和IMAP】;
    2. 接着,请您在【POP选项】选择【是】;
    3. 在【使用POP的设备和应用可以设置为删除重Outlook下载的邮件】中,我们建议您点选【不允许设备和应用删除来自Outlook的邮件。它会将邮件移动到特殊的POP文件夹】,这是为了防止您的邮件丢失的情况;
    4. 请完成以上步骤后,单击【保存】即可。

    查询原因:版本使用python3.7,官网做出如下变动:server_hostname cannot be an empty string or start with a leading dot.

    也就是说现在对于3.7需要对非ssl模式传入smtp server对象传入str模式的host地址再进行server对象创建连接

    或者:

    在github有人曾给出如下修复针对ssl,非ssl

    https://github.com/tp4a/teleport/commit/dea9c48d825e7bac5bbc41006bc993713e4b516f

    尝试修复:服务器不支持SMTP AUTH扩展。

     最终及解决代码如下:

    #!/usr/bin/python3
    import os
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.header import Header
    from email.mime.image import MIMEImage
    
    def main():
    
        sender='chen1054@outlook.com'
        receiverList=['chen1054@outlook.com']
        user='chen1054@outlook.com'
        emailPwd='youroutlookpwd'#用户邮箱密码无需开通授权码
        smtpServer=r'smtp-mail.outlook.com'
        commonPort=587 # 25也有效
        emailTitle='Hello,World!'
        htmlPath=r'F:/eclipse/readme/readme_eclipse.html'
        attachPathList=[r'C:\Users\Administrator\PycharmProjects\Supro\src\logs\Info\20190330.log',r'C:\Users\Administrator\PycharmProjects\Supro\src\logs\Info\testpc.png']
        emailChanel(sender,receiverList,user,emailPwd,smtpServer,commonPort,emailTitle,htmlPath,attachPathList)
    
    
    def emailChanel(sender,receiverList,user,emailPwd,smtpServer,commonPort,emailTitle,htmlPath=None,attachPathList=None):
        multiPart=MIMEMultipart()
        multiPart['From']=sender
        multiPart['To']=','.join(receiverList)
        subject=emailTitle
        multiPart['Subject']=Header(subject,"utf-8")
        if os.path.isfile(htmlPath):
            if os.path.exists(htmlPath):
                pass
            else:
                raise IOError("htmlPath not exist")
        else:
            raise IOError("html path is not file..")
        emailBody=MIMEText(_text=open(htmlPath,'rb').read(),_subtype='html',_charset="utf-8")
        multiPart.attach(emailBody)
        if isinstance(attachPathList,list):
                for attachPath in attachPathList:
                    if os.path.exists(attachPath):
                        pass
                    else:
                        raise  IOError("attachPath not exist")
        else:
            raise TypeError("expected type is list,but get {}".format(type(attachPathList).__name__))
        for attachPath in attachPathList:
            if os.path.splitext(attachPath)[-1]==".log":
                attach=MIMEText(open(attachPath, 'rb').read(), 'base64', 'utf-8')
                attach["Content-Type"] = 'application/octet-stream'
                attach["Content-Disposition"] = 'attachment; filename="dailyLog.log"' # filename not strict
                multiPart.attach(attach)
            if os.path.splitext(attachPath)[-1]==".png":
                fp = open(attachPath, 'rb')
                msgImage = MIMEImage(fp.read(),_subtype='octet-stream')
                fp.close()
                msgImage.add_header('Content-Disposition', 'attachment', filename="attach.png")
                multiPart.attach(msgImage)
        # https://github.com/tp4a/teleport/commit/dea9c48d825e7bac5bbc41006bc993713e4b516f
        smtp=smtplib.SMTP("{}:{}".format(smtpServer,commonPort))
        try:
            smtp.ehlo()
            smtp.starttls()
            smtp.login(user,emailPwd)
            smtp.sendmail(sender,receiverList,multiPart.as_string())
        except smtplib.SMTPException as e:
            print("send fail",e)
        else:
            print("success")
        finally:
            try:
                smtp.quit()
            except smtplib.SMTPException:
                print("quit fail")
            else:
                print("quit success")
    if __name__ == '__main__':
        main()
    

      

     如果你对上面问题还有疑问可以加群咨询我:

  • 相关阅读:
    hdu 4002 Find the maximum
    hdu 2837 坑题。
    hdu 3123
    zoj Treasure Hunt IV
    hdu 2053 Switch Game 水题一枚,鉴定完毕
    poj 1430 Binary Stirling Numbers
    hdu 3037 Saving Beans
    hdu 3944 dp?
    南阳oj 求N!的二进制表示最低位的1的位置(从右向左数)。
    fzu 2171 防守阵地 II
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/10629368.html
Copyright © 2011-2022 走看看