c# - 从 Lotus Notes 发送带有附件和 HTML 正文的电子邮件
问题描述
是的,我正在尝试通过 lotus notes 发送电子邮件表单,它有一个附件,并且正文需要使用 HTML。
我有一些我读过的代码应该允许我这样做,但事实并非如此。如果没有 HTML 正文,附件将发送,当我暗示 HTML 正文时,电子邮件仍会发送,但附件消失
try
{
Session.Initialize("1234567890");
Session.ConvertMime = false;
MailServer = Session.GetEnvironmentString("MailServer", true);
MailFile = Session.GetEnvironmentString("Mailfile", true);
MailDb = Session.GetDatabase(MailServer.ToString(), MailFile.ToString(), false);
MailDoc = MailDb.CreateDocument();
MailDoc.ReplaceItemValue("Form", "Memo");
MailDoc.ReplaceItemValue("SendTo", "XXXXXX");
MailDoc.ReplaceItemValue("subject", "Test test");
MailDoc.AppendItemValue("Principal", "HIHIHi");
object obAttachment;
Mime = MailDoc.CreateMIMEEntity("Body");
HtmlBody = Session.CreateStream();
HtmlBody.Open("C:\\Users\\Documents\\310143-001_1125_20181016.pdf", "");
Mime.SetContentFromBytes(HtmlBody, "Application/pdf", Domino.MIME_ENCODING.ENC_IDENTITY_BINARY);
HtmlBody.Close();
HtmlBody.Truncate();
HtmlBody = Session.CreateStream();
HtmlBody.WriteText(mailBoby, EOL_TYPE.EOL_CR);
Mime.SetContentFromText(HtmlBody, "text/html;charset=UTF-8", Domino.MIME_ENCODING.ENC_IDENTITY_BINARY);
Object obj = MailDoc.GetItemValue("SendTo");
MailDoc.SaveMessageOnSend = true;
MailDoc.Send(false, ref obj);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
rt = null;
Session = null;
MailDoc = null;
MailDb = null;
}
解决方案
您必须为 HTML 和文件附件创建多部分 MIME 消息。
Session.Initialize("1234567890");
Session.ConvertMime = false;
MailServer = Session.GetEnvironmentString("MailServer", true);
MailFile = Session.GetEnvironmentString("Mailfile", true);
MailDb = Session.GetDatabase(MailServer.ToString(), MailFile.ToString(), false);
MailDoc = MailDb.CreateDocument();
MailDoc.ReplaceItemValue("Form", "Memo");
MailDoc.ReplaceItemValue("SendTo", "XXXXXX");
MailDoc.ReplaceItemValue("subject", "Test test");
MailDoc.AppendItemValue("Principal", "HIHIHi");
object obAttachment;
AttachmentPath = "C:\\Users\\Documents\\";
AttachmentFile = "310143-001_1125_20181016.pdf";
mailBody = "<html><head></head><body>Hello There.</body></html>";
Mime = MailDoc.CreateMIMEEntity("Body");
MimeHeader = Mime.CreateHeader("MIME-Version");
MimeHeader.SetHeaderVal("1.0");
MimeHeader= Mime.CreateHeader("Content-Type");
MimeHeader.SetHeaderValAndParams( "multipart/alternative;boundary=\"=NextPart_=\"");
MimeChild = Mime.CreateChildEntity();
HtmlBody = Session.CreateStream();
HtmlBody.WriteText(mailBody, Stream.EOL_CR);
MimeChild.SetContentFromText(HtmlBody, "text/html;charset=\"iso-8859-1\"", Domino.MIME_ENCODING.ENC_NONE);
MimeChild = Mime.CreateChildEntity();
HtmlBody = Session.CreateStream();
HtmlBody.Open(AttachmentPath + AttachmentFile, "");
MimeHeader = MimeChild.CreateHeader("Content-Disposition");
MimeHeader.SetHeaderVal("attachment; filename=\""+AttachmentFile+"\"");
MimeChild.SetContentFromBytes(HtmlBody, "application/octet-stream; name=\""+AttachmentFile+"\"", Domino.MIME_ENCODING.ENC_IDENTITY_BINARY);
MailDoc.CloseMIMEEntities(true);
Session.ConvertMime = true;
Object obj = MailDoc.GetItemValue("SendTo");
MailDoc.SaveMessageOnSend = true;
MailDoc.Send(false, ref obj);
这应该适用于大多数文件类型,但您可以application/pdf
为Content-Disposition
PDF 文件指定。
推荐阅读
- jquery - 如何检查是否已经为请求日期预订了约会
- javascript - 无法使用 JS 动态调整 SVG 大小(仅适用于桌面)
- python - 使用python模拟2D弹性碰撞
- reactjs - 不变量失败:您不应该使用
外面 - android - 如何在安装应用程序期间在文件目录中的 Android 项目中创建目录?
- sql-server - 将 Django 连接到数据库的问题
- c# - 如何在代码中的两个 DependencyProperties 之间创建 TwoWay 绑定?
- synchronization - 同步蓝牙设备同时播放振动模式
- sql - SSRS - 在依赖列上选择查询
- flutter - 如何在颤振中创建荧光笔选项?