2014-07-25 95 views
0

我試圖設置一個從SQL數據庫中提取數據的IMAP服務器。 我有消息工作沒有問題,但我不知道如何附加附件。Lumisoft.net IMAP服務器無法將附件添加到郵件

Mail_Message對象上的附件對象也只有一個getter和一個名爲GetAttachments()的方法,它似乎並沒有連接到任何地方。

我當前的代碼是:

//this is my own object I'm using to pull data from the database 
var cmMsg = _ml.GetMessage(mId, session.AuthenticatedUserIdentity.Name, -1); 

var msgBody = new MIME_b_Text(MIME_MediaTypes.Text.html); 
var msg = new Mail_Message(); 
msg.Body = msgBody; 
msg.To = new Mail_t_AddressList(); 
msg.From = new Mail_t_MailboxList {new Mail_t_Mailbox(cmMsg.From, cmMsg.FromEmail)}; 
msg.Cc = new Mail_t_AddressList(); 
msg.Bcc = new Mail_t_AddressList(); 

foreach (var recipient in cmMsg.Recipients) 
{ 
    if (recipient.isTo) 
    { 
     msg.To.Add(new Mail_t_Mailbox(recipient.FullName, recipient.SMTPAddress)); 
    } 
    else if(recipient.isCC) 
    { 
     msg.Cc.Add(new Mail_t_Mailbox(recipient.FullName, recipient.SMTPAddress)); 
    } 
    else if (recipient.isBCC) 
    { 
     msg.Bcc.Add(new Mail_t_Mailbox(recipient.FullName, recipient.SMTPAddress)); 
    } 
} 

//I tried adding a setter to the attachment object, but just get errors with this code 
var a = new List<MIME_Entity>(); 

foreach (var attachment in cmMsg.Attachments) 
{ 
    var aCT = new MIME_b_Multipart(new MIME_h_ContentType("application/octet-stream")); 


    a.Add(new MIME_Entity 
    { 
     Body = aCT, 
     ContentDisposition = new MIME_h_ContentDisposition("attachment"), 

    }); 
} 
msg.Attachments = a.ToArray(); 

msg.Subject = cmMsg.Subject; 
msg.Date = cmMsg.TimeDate; 
msg.MessageID = cmMsg.InternetMessageId; 

if (e.FetchDataType == IMAP_Fetch_DataType.MessageStructure) 
{ 

} 
else if(e.FetchDataType == IMAP_Fetch_DataType.MessageHeader) 
{ 

} 
else 
{ 
    msgBody.SetText(MIME_TransferEncodings.QuotedPrintable, Encoding.UTF8, cmMsg.HtmlBody); 
    _da.MarkAsRead(archiveID, session.AuthenticatedUserIdentity.Name); 
} 

e.AddData(info, msg); 

我不知道如果我失去了一些東西,或只是有這個設置不對。我注意到示例項目中有一個MySQL API,但是它與附件中沒有任何關係。

回答

0

好吧,原來我正在做這個完全錯誤的方式。以下是需要的代碼

實際上,它要求將消息設置爲多部分混合而不是僅僅文本。然後,您可以將附件添加爲正文部分。

var cmMsg = _ml.GetMessage(mId, session.AuthenticatedUserIdentity.Name, -1); 

      MIME_h_ContentType contentType_multipartMixed = new MIME_h_ContentType(MIME_MediaTypes.Multipart.mixed); 
      contentType_multipartMixed.Param_Boundary = Guid.NewGuid().ToString().Replace('-', '.'); 
      MIME_b_MultipartMixed multipartMixed = new MIME_b_MultipartMixed(contentType_multipartMixed); 
      var msg = new Mail_Message(); 
      msg.To = new Mail_t_AddressList(); 
      msg.From = new Mail_t_MailboxList {new Mail_t_Mailbox(cmMsg.From, cmMsg.FromEmail)}; 
      msg.Cc = new Mail_t_AddressList(); 
      msg.Bcc = new Mail_t_AddressList(); 
      msg.Body = multipartMixed; 

      foreach (var recipient in cmMsg.Recipients) 
      { 
       if (recipient.isTo) 
       { 
        msg.To.Add(new Mail_t_Mailbox(recipient.FullName, recipient.SMTPAddress)); 
       } 
       else if(recipient.isCC) 
       { 
        msg.Cc.Add(new Mail_t_Mailbox(recipient.FullName, recipient.SMTPAddress)); 
       } 
       else if (recipient.isBCC) 
       { 
        msg.Bcc.Add(new Mail_t_Mailbox(recipient.FullName, recipient.SMTPAddress)); 
       } 
      } 

      msg.Subject = cmMsg.Subject; 
      msg.Date = cmMsg.TimeDate; 
      msg.MessageID = cmMsg.InternetMessageId; 
      msg.MimeVersion = "1.0"; 
      msg.Header.Add(new MIME_h_Unstructured("X-MS-Has-Attach", "yes")); 

      if (e.FetchDataType == IMAP_Fetch_DataType.MessageStructure) 
      { 

      } 
      else if(e.FetchDataType == IMAP_Fetch_DataType.MessageHeader) 
      { 

      } 
      else 
      { 
       MIME_Entity entity_text_plain = new MIME_Entity(); 
       MIME_b_Text text_plain = new MIME_b_Text(MIME_MediaTypes.Text.plain); 
       entity_text_plain.Body = text_plain; 
       text_plain.SetText(MIME_TransferEncodings.QuotedPrintable, Encoding.UTF8, cmMsg.HtmlBody); 
       multipartMixed.BodyParts.Add(entity_text_plain); 


       foreach (var attachment in cmMsg.Attachments) 
       { 
        using (var fs = new FileStream(@"C:\test.txt", FileMode.Open)) 
        { 
         multipartMixed.BodyParts.Add(Mail_Message.CreateAttachment(fs, "test.txt")); 
        } 
       } 
      } 

      e.AddData(info, msg); 
相關問題