美文网首页工作生活
Python 调用 Outlook API实现邮件发送以及草稿保

Python 调用 Outlook API实现邮件发送以及草稿保

作者: 混吃等死MrYao | 来源:发表于2019-07-03 20:33 被阅读0次

    公司合规章程比较多,公司邮箱的SMTP邮件端口都不给随意使用。但是有一些日常繁琐重复的工作需要用邮件群发小组内部分享。 所以直接调用了python中win32com的模块。 可以实现调用本地电脑outlook客户端,编辑,发送邮件。 方法简单也不需要使用SMTP端口。

    首先安装调用win32com模块,该模块基本包含了office系列工具的全部日常操作的借口,有时间的同学也可以去microsoft官网看一下相关的接口内容。
    https://docs.microsoft.com/en-us/previous-versions/office/office-365-api/

    import win32com.client as win32
    

    创建一个函数,参数为:收件人,主题,正文,附件。生成文件后自动发送。

        def sendmail(self,receivers,title,body,attach_path=None):
            outlook=win32.Dispatch('Outlook.Application')
            mail=outlook.CreateItem(0)
            if isinstance(receivers,list):   #判断存在多少收件人
                if len(receivers)>1:
                    mail.To=';'.join(receivers)
                else:
                    mail.To=receivers[0]
            else:
                mail.To=receivers 
            mail.Subject=title 
            mail.Body=body 
            if attach_path is None:  #判断是否存在附件地址文件
                pass 
            else:
                mail.Attachments.Add(attach_path)
            mail.Send()
    

    发送后,也可以查询当前收件箱最新一封邮件

        def readNewMail(self):
            outlook = win32.Dispatch('Outlook.Application').GetNamespace("MAPI")
            inbox=outlook.GetDefaultFolder(6)
            body_content=inbox.Items.GetLast().body
            return body_content
    

    这里 GetDefaultFolder 数值6为收件箱的index, 其他位置也可以去官方API中查询

    olFolderCalendar(9), olFolderContacts(10), olFolderDeletedItems(3), olFolderDrafts(16), olFolderInbox(6), olFolderJournal(11), olFolderNotes(12), olFolderOutbox(4), olFolderSentMail(5), or olFolderTasks(13).

    全部代码如下,供参考:

    import win32com.client as win32
    class outlook():
       '''
       操作一下本地outlook 
       '''
       def init(self):
           pass 
           
       def openoutlook(self):
           pass 
       
       def sendmail(self,receivers,title,body,attach_path=None):
           '''
           发送邮件
           :param receivers:收件人
           :param title:主题
           :param body:邮件内容
           :param attach_path:附件地址
           ;retuxn:发送
           '''
           outlook=win32.Dispatch('Outlook.Application')
           mail=outlook.CreateItem(0)
           
           if isinstance(receivers,list):
               if len(receivers)>1:
                   mail.To=';'.join(receivers)
               else:
                   mail.To=receivers[0]
           else:
               mail.To=receivers 
           mail.Subject=title 
           mail.Body=body 
           if attach_path is None:
               pass 
           else:
               mail.Attachments.Add(attach_path)
           mail.Send()
       
       def draftmail(self,receivers,title,body,attach_path=None):
           '''
           保存一份草稿
           :param receivera:收件人
           :param title:主题
           :param body:邮件内容
           :param attach_path:附件地址
           :return:保存
           '''
           outlook=win32.Dispatch('Outlook.Application')
           mail=outlook.CreateItem(0)
           
           #如果多个人,这里做个判断
           if isinstance(receivers,list):
               if len(receivers)>1:
                   mail.To=';'.join(receivers)
               else:
                   mail.To=receivers[0]
           else:
               mail.To=receivers
           mail.Subject=title 
           mail.Body=body 
           if attach_path is not None:
               mail.Attachments.Add(attach_path)
           mail.Save()
    
       def readNewMail(self):
           outlook = win32.Dispatch('Outlook.Application').GetNamespace("MAPI")
           inbox=outlook.GetDefaultFolder(6)
           body_content=inbox.Items.GetLast().body
           return body_content
    
    if __name__=='__main__':
       otlk = outlook()
       last_new_mail=otlk.readNewMail()
       print(last_new_mail)
       title="****test new script"
       receivers="XXX@gmail.com"
       body='test email from my script,easy peasy lemon squeezy'
       filep=r"C:/sd/dsf/sss.xlsx"
       otlk.sendmail(title=title,receivers=receivers,body=body,attach_path=filep)
    

    :) 如果有所帮助,请点赞,评论。欢迎讨论咨询

    相关文章

      网友评论

        本文标题:Python 调用 Outlook API实现邮件发送以及草稿保

        本文链接:https://www.haomeiwen.com/subject/nkfhhctx.html