web-dev-qa-db-ja.com

C#MailTo with Attachment?

現在、以下の方法を使用して、ユーザーのOutlookメールアカウントを開き、送信する関連コンテンツをメールに入力しています。

public void SendSupportEmail(string emailAddress, string subject, string body)
{
   Process.Start("mailto:" + emailAddress + "?subject=" + subject + "&body=" 
                + body);
}

ただし、メールに添付ファイルを追加できるようにしたいと思います。

何かのようなもの:

public void SendSupportEmail(string emailAddress, string subject, string body)
{
   Process.Start("mailto:" + emailAddress + "?subject=" + subject + "&body=" 
      + body + "&Attach="
      + @"C:\Documents and Settings\Administrator\Desktop\stuff.txt");
}

しかし、これはうまくいかないようです。誰もがこれを機能させる方法を知っていますか?

大いに感謝します。

よろしく。

27
Goober

mailto:添付ファイルを正式にサポートしていません。 Outlook 2003は次の構文で動作すると聞きました。

<a href='mailto:[email protected]?Subject=SubjTxt&Body=Bod_Txt&Attachment=""C:\file.txt"" '>

これを処理するより良い方法は、 System.Net.Mail.Attachment を使用してサーバーにメールを送信することです。

    public static void CreateMessageWithAttachment(string server)
    {
        // Specify the file to be attached and sent.
        // This example assumes that a file named Data.xls exists in the
        // current working directory.
        string file = "data.xls";
        // Create a message and set up the recipients.
        MailMessage message = new MailMessage(
           "[email protected]",
           "[email protected]",
           "Quarterly data report.",
           "See the attached spreadsheet.");

        // Create  the file attachment for this e-mail message.
        Attachment data = new Attachment(file, MediaTypeNames.Application.Octet);
        // Add time stamp information for the file.
        ContentDisposition disposition = data.ContentDisposition;
        disposition.CreationDate = System.IO.File.GetCreationTime(file);
        disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
        disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
        // Add the file attachment to this e-mail message.
        message.Attachments.Add(data);

        //Send the message.
        SmtpClient client = new SmtpClient(server);
        // Add credentials if the SMTP server requires them.
        client.Credentials = CredentialCache.DefaultNetworkCredentials;

        try {
          client.Send(message);
        }
        catch (Exception ex) {
          Console.WriteLine("Exception caught in CreateMessageWithAttachment(): {0}", 
                ex.ToString() );              
        }
        data.Dispose();
    }
10
Jon Galloway

デフォルトの電子メールクライアントにアクセスする場合は、MAPI32.dllを使用できます(Windows OSでのみ動作します)。次のラッパーを見てください。

http://www.codeproject.com/KB/IP/SendFileToNET.aspx

コードは次のようになります。

MAPI mapi = new MAPI();
mapi.AddAttachment("c:\\temp\\file1.txt");
mapi.AddAttachment("c:\\temp\\file2.txt");
mapi.AddRecipientTo("[email protected]");
mapi.AddRecipientTo("[email protected]");
mapi.SendMailPopup("testing", "body text");

// Or if you want try and do a direct send without displaying the mail dialog
// mapi.SendMailDirect("testing", "body text");
51
Alex

このアプリは本当にOutlookを使用する必要がありますか? System.Net.Mail名前空間を使用しない理由はありますか?

本当にOutlookを使用する必要がある場合(そして、変更する可能性のあるサードパーティの依存関係に基づいてアプリを作成しているのでお勧めしません)、Microsoft.Office名前空間を調べる必要があります

ここから始めます: http://msdn.Microsoft.com/en-us/library/Microsoft.office.interop.Outlook.aspx

4
David

これを試して

var proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = string.Format("\"{0}\"", Process.GetProcessesByName("Outlook")[0].Modules[0].FileName);
proc.StartInfo.Arguments = string.Format(" /c ipm.note /m {0} /a \"{1}\"", "[email protected]", @"c:\attachments\file.txt");
proc.Start();
2
kernowcode

公式にはい、mailToプロトコルは添付ファイルをサポートしていません。しかし、Williwygは、それを行う方法があることをここで非常によく説明しました- 添付ファイルとともにデフォルトのメールクライアントを開く

0
Mahesh