【问题标题】:Sending Email from Lotus Notes with Attachment & HTML body从 Lotus Notes 发送带有附件和 HTML 正文的电子邮件
【发布时间】:2018-10-30 01:50:42
【问题描述】:

是的,我正在尝试通过 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;

            }

【问题讨论】:

    标签: c# lotus-notes lotus-domino


    【解决方案1】:

    您必须为 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 文件指定 application/pdfContent-Disposition

    【讨论】:

      【解决方案2】:

      您在 Mime 对象上调用了两次 SetContentFromBytes 和 SetContentFromText 方法。在同一个 Mime 对象上。第二个调用覆盖第一个。

      您需要使用CreateChildEntity method 创建一个 MIME 实体树,将父实体的内容类型设置为“多部分”,并将其中一个子实体设置为您的文本和附件中的一个实体。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-30
        • 1970-01-01
        • 1970-01-01
        • 2014-07-17
        • 1970-01-01
        • 1970-01-01
        • 2018-07-24
        • 1970-01-01
        相关资源
        最近更新 更多