繁体   English   中英

如何使用Outlook 2010(无smtp)和python发送带有emebbed图像(非附件)的HTML格式电子邮件

[英]How to send HTML format email with emebbed images(not attachment ) using Outlook 2010(no smtp) and python

如下所示,目前我已经实现了使用Outlook 2010和python发送HTML格式的电子邮件

def send_mail_via_com(self):
  o = win32com.client.Dispatch("Outlook.Application")
  Msg = o.CreateItem(0)
  Msg.To = self.myEmailAddress 
  Msg.BCC = self.myEmailAddress

  Msg.Subject = 'This is Subject'
  Msg.HTMLBody  = htmlEmailContent
  Msg.Send()

展望未来,我想在HTML格式的电子邮件中显示一些嵌入图像,我检查了HTML源代码,它如下所示:

 <img border=0 width=117 height=20 id="Picture_x0020_2" src="cid:image001.png@01CE9386.AB9B5E70" alt="Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: Description: cid:786FB7C2-A5F6-462A-B0FD-EA865CD02221@xxx.example.com">

我试图附加图像文件(使用上面的html代码中引用的相同名称作为附件),但它只是附件,不会在文本正文中显示为嵌入图像。 我们的邮件服务不支持SMTP协议,所以我不能发送包含嵌入图像的Multipart html电子邮件那样使用smtplib 有人可以帮帮我吗? 提前致谢!

    attachment1 = "G:\\image001.png"
    Msg.Attachments.Add(attachment1)

2013/8/8更新,我通过http://social.msdn.microsoft.com/Forums/vstudio/en-US/6c063b27-7e8a-4963-ad5f-ce7e5ffb2c64/how-to-embed-获得了C#版本代码image-in-html-body-in-c-into-outlook-mail ,任何人都可以向我展示这些的Python对应代码:

   Attachment attachment = newMail.Attachments.Add(
                      @"E:\Pictures\image001.jpg"
                      , OlAttachmentType.olEmbeddeditem
                      , null
                      , "Some image display name"
                     );

   string imageCid = "image001.jpg@123";

   attachment.PropertyAccessor.SetProperty(
                     "http://schemas.microsoft.com/mapi/proptag/0x3712001E"
                     , imageCid
                     );

    newMail.HTMLBody = String.Format(
                      "<body><img src=\"cid:{0}\"></body>"
                     , imageCid
                     );
import win32com.client

o = win32com.client.Dispatch("Outlook.Application")
newMail = o.CreateItem(0)

attachment = newMail.Attachments.Add("E:\Pictures\image001.jpg", win32com.client.constants.olEmbeddeditem, 0, "Some image display name")
imageCid = "image001.jpg@123"
attachment.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001E", imageCid)
newMail.HTMLBody = "<body><img src=\"cid:{0}\"></body>".format(imageCid)

msg.Send()

https://msdn.microsoft.com/en-us/library/office/ff869553(v=office.15).aspx

在python中,你必须在属性PR_ATTACH_CONTENT_ID_W之前定义,因为它没有在pywin32 mapitags中定义(win32com.mapi.mapitags)

from win32com.mapi.mapitags import PROP_TAG, PT_UNICODE 

# defines the property PR_ATTACH_CONTENT_ID_W  not defined  in    pywin32 mapitags.
# number of PR_ATTACH_CONTENT_ID_W Property is in MSDN Library
# https://msdn.microsoft.com/en-us/library/cc765868.aspx
# all mapi tags are defined in https://msdn.microsoft.com/en-us/library/cc815492%28v=office.15%29.aspx
mapitags.PR_ATTACH_CONTENT_ID_W = PROP_TAG(PT_UNICODE, 0x3712)

# now you can use the property PR_ATTACH_CONTENT_ID_W like Dmitry explained you.

使用一个HTML页面,包含您的文本内容和CSS

获取要在电子邮件中嵌入的图像

使用Base64编码器将二进制照片变成一个巨大的文本字符串(例如: http//www.greywyvern.com/code/php/binary2base64

用该字符串替换您的普通图像源

保存文件并正常发送

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM