12

Web メール アプリケーションを作成しましたが、添付ファイルを表示および保存するにはどうすればよいですか?

サードパーティの dll であるOpenPopを使用しています。添付ファイル付きのメールを送信したり、添付ファイルなしでメールを読んだりできます。

これはうまくいきます:

Pop3Client pop3Client = (Pop3Client)Session["Pop3Client"]; // Creating newPopClient 
int messageNumber = int.Parse(Request.QueryString["MessageNumber"]);
Message message = pop3Client.GetMessage(messageNumber);
MessagePart messagePart = message.MessagePart.MessageParts[1];
lblFrom.Text = message.Headers.From.Address; // Writeing message. 
lblSubject.Text = message.Headers.Subject;
lblBody.Text=messagePart.BodyEncoding.GetString(messagePart.Body);

このコードの 2 番目の部分は添付ファイルの内容を表示しますが、これはテキスト ファイルの場合にのみ役立ちます。添付ファイルを保存できるようにする必要があります。また、ここにあるコードの一番下のセクションにはメッセージの本文が書かれているため、添付ファイルを受け取った場合、メッセージの本文を表示できません。

if (messagePart.IsAttachment == true) { 
    foreach (MessagePart attachment in message.FindAllAttachments()) { 
        if (attachment.FileName.Equals("blabla.pdf")) { // Save the raw bytes to a file
            File.WriteAllBytes(attachment.FileName, attachment.Body); //overwrites MessagePart.Body with attachment 
        } 
    } 
}
4

7 に答える 7

16

誰かがまだ答えを探しているなら、これは私にとってはうまくいきました。

var client = new Pop3Client();
try
{            
    client.Connect("MailServerName", Port_Number, UseSSL); //UseSSL true or false
    client.Authenticate("UserID", "password");   

    var messageCount = client.GetMessageCount();
    var Messages = new List<Message>(messageCount);

    for (int i = 0;i < messageCount; i++)
    {
        Message getMessage = client.GetMessage(i + 1);
        Messages.Add(getMessage);
    }

    foreach (Message msg in Messages)
    {
        foreach (var attachment in msg.FindAllAttachments())
        {
            string filePath = Path.Combine(@"C:\Attachment", attachment.FileName);
            if(attachment.FileName.Equals("blabla.pdf"))
            {
                FileStream Stream = new FileStream(filePath, FileMode.Create);
                BinaryWriter BinaryStream = new BinaryWriter(Stream);
                BinaryStream.Write(attachment.Body);
                BinaryStream.Close();
            }
        }
    }
}
catch (Exception ex)
{
    Console.WriteLine("", ex.Message);
}
finally
{
    if (client.Connected)
        client.Dispose();
}
于 2014-02-18T13:44:50.677 に答える
6

将来の読者のために、Pop3の新しいリリースでより簡単な方法があります

using( OpenPop.Pop3.Pop3Client client = new Pop3Client())
        {
            client.Connect("in.mail.Your.Mailserver.com", 110, false);
            client.Authenticate("usernamePop3", "passwordPop3", AuthenticationMethod.UsernameAndPassword);
            if (client.Connected)
            {
                int messageCount = client.GetMessageCount();
                List<Message> allMessages = new List<Message>(messageCount);
                for (int i = messageCount; i > 0; i--)
                {
                    allMessages.Add(client.GetMessage(i));
                }
                foreach (Message msg in allMessages)
                {
                    var att = msg.FindAllAttachments();
                    foreach (var ado in att)
                    {
                        ado.Save(new System.IO.FileInfo(System.IO.Path.Combine("c:\\xlsx", ado.FileName)));
                    }
                }
            }
           }
于 2014-02-05T06:49:21.330 に答える
4

このOpenPop.Mime.MessageクラスにはToMailMessage()、OpenPopのメッセージをプロパティSystem.Net.Mail.MailMessageを持つに変換するメソッドがありAttachmentsます。そこから添付ファイルを抽出してみてください。

于 2012-05-12T12:57:03.250 に答える
0

これはかなり前に書いたものですが、POP サーバーに置かれた電子メール メッセージ内の XML 添付ファイルを保存するために使用した次のコード ブロックを見てください。

OpenPOP.POP3.POPClient client = new POPClient("pop.yourserver.co.uk", 110, "your@email.co.uk", "password_goes_here", AuthenticationMethod.USERPASS); 
if (client.Connected) {
int msgCount = client.GetMessageCount();

/* Cycle through messages */
for (int x = 0; x < msgCount; x++)
    {
        OpenPOP.MIMEParser.Message msg = client.GetMessage(x, false);
        if (msg != null) {
            for (int y = 0; y < msg.AttachmentCount; y++)
            {
                Attachment attachment = (Attachment)msg.Attachments[y];

                if (string.Compare(attachment.ContentType, "text/xml") == 0)
                {
                    System.Xml.XmlDocument doc = new System.Xml.XmlDocument();

                    string xml = attachment.DecodeAsText();
                    doc.LoadXml(xml);
                    doc.Save(@"C:\POP3Temp\test.xml");
                }
            }
        }
    }
}
于 2012-06-19T16:24:10.530 に答える