从 Lotus Notes 发送带有附件和 HTML 正文的电子邮件
Sending Email from Lotus Notes with Attachment & HTML body
好的,我正在尝试通过 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;
}
您在 Mime 对象上调用了 SetContentFromBytes 和 SetContentFromText 方法两次。在同一个 Mime 对象上。第二个调用覆盖第一个。
您需要使用 CreateChildEntity method 创建一棵 MIME 实体树,将父实体的内容类型设置为 'multipart',并将其中一个子实体设置为您的文本,将其中一个子实体设置为附件中的实体。
您必须为 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);
这应该适用于大多数文件类型,但您可以为 PDF 文件的 Content-Disposition
指定 application/pdf
。
好的,我正在尝试通过 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;
}
您在 Mime 对象上调用了 SetContentFromBytes 和 SetContentFromText 方法两次。在同一个 Mime 对象上。第二个调用覆盖第一个。
您需要使用 CreateChildEntity method 创建一棵 MIME 实体树,将父实体的内容类型设置为 'multipart',并将其中一个子实体设置为您的文本,将其中一个子实体设置为附件中的实体。
您必须为 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);
这应该适用于大多数文件类型,但您可以为 PDF 文件的 Content-Disposition
指定 application/pdf
。