Lumisoft.net IMAP服务器无法向邮件添加附件

时间:2014-07-25 14:18:21

标签: c# imap email-attachments lumisoft

我正在尝试设置一个从SQL数据库中提取数据的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,但它与其中的附件没有任何关系。

1 个答案:

答案 0 :(得分: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);