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

公司合规章程比较多,公司邮箱的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="[email protected]"
   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实现邮件发送以及草稿保存)