使用win32com通过outlook发送电子邮件并添加签名fi

2024-04-27 23:57:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python3.5来自动处理一些工作邮件。我们不能使用smtp。必须通过win32com控制outlook。我把一切都搞定了。我可以创建一个html电子邮件。我可以给它一个电子邮件地址,如果它是打开的outlook配置文件中的活动电子邮件地址,它将从该地址发送。我可以添加抄送、密件抄送、主题等

我的问题是添加outlook中存储的签名。我已经读到outlook签名不公开,因此我不能像调用SendUsingAccount或邮件.CC领域。在

我的替代方法是让用户使用tkinter和askopenfilename()指定文件。在

这在很大程度上是有效的。用户指定签名文件位置一次。我把它存储在我的tkinter程序启动时读取的数据文件中。用户生成电子邮件并发送。在

问题是我从签名文件中读取HTML并将其存储在一个变量中,然后将其附加到现有的HTMLBody中。在

它起作用了。但是任何包含在HTML签名文件中的图片都不会显示。在

我试着写一个附加的脚本,把html文件中图片的短地址替换成完整的目录,希望能解决这个问题。不行。在

有没有办法确保签名文件中包含的任何图片都能在电子邮件中显示???在

这是我的签名文件HTML阅读器/编辑器

def altersigfile(file):
    fullDir = file
    newDir = fullDir.rsplit("\\",1)[0]
    subDir = fullDir.rsplit("\\", 1)[1]
    subDir = subDir.replace(" ", "%20")
    subDir = subDir.strip(".htm")
    subDir += "_files"
    newDir += "/" + subDir
    newDir = newDir.replace("\\", "/")
    newsigfile = ""

    with open(fullDir,"r") as file:
        for line in file:

            if "src=" in line:
                check = ""
                newline = ""
                check = r'src="' + subDir
                newline = re.sub(subDir, newDir, line)
                newsigfile += newline

            else:
                newsigfile += line



    return newsigfile

这是我的电子邮件脚本:

^{pr2}$

重申一下。除了签名文件中包含的图片将不显示外,上述任何方式都有效。这是唯一的错误,我似乎找不到一个方法使它工作。 任何帮助都将不胜感激。谢谢您。在

对不起,第二批代码的格式化。在我的一生中,我似乎无法使它的格式正确。在


Tags: 用户电子邮件地址htmllinenewline邮件图片
2条回答

以防有人好奇。我在空闲时是这样做的:

import win32com.client as win32
import re
ol = win32.Dispatch('Outlook.Application')
msg = ol.CreateItem(0)
msg.GetInspector
bodystart = re.search("<body.*?>", msg.HTMLBody)
msg.HTMLBody = re.sub(bodystart.group(), bodystart.group()+"Hello this is a test body", msg.HTMLBody)

这里的关键部分是正则表达式。 基本上是以下几行:

^{pr2}$

上面的代码行查找一个精确的字符串“body”,后跟任意数量的任何字符“.*”,但不是以贪婪的方式“?”然后以“>;”结尾 一旦我有了它,我只是简单地用匹配的字符串替换匹配的字符串+我想在我的电子邮件正文中的任何东西。g2g

一些其他的选择。在

  1. Redemption通过RDOSession.Signatures集合及其RDOSignature对象公开将签名(文本、图像、样式)复制到指定消息的ApplyTo方法。

  2. 如果您只需要默认签名,请让Outlook执行此操作-当Outlook显示邮件(MailItem.Display)或Outlook认为您将通过访问MailItem.GetInspector属性很快显示邮件时,将添加该签名。只要您调用MailItem.DisplayMailItem.GetInspector,只要您还没有使用body或HTMLBody属性设置消息正文,消息正文就会添加签名。现在您所要做的就是读取HTMLBody属性(它只有签名),将文本合并到该值中,并将HTMLBody属性设置回原处。注意,不能简单地连接两个HTML字符串,它们必须合并。

相关问题 更多 >