0

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 があることに気付きましたが、それも添付ファイルとは何の関係もありませんでした。

4

1 に答える 1

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);
于 2014-07-25T16:26:05.893 に答える