سؤال

حاليا أنا أستخدم الطريقة أدناه لفتح حساب البريد الإلكتروني للمستخدمين وملء البريد الإلكتروني مع المحتوى ذي الصلة للإرسال:

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");
}

ومع ذلك لا يبدو أن هذا يعمل. هل يعرف أحد بالطريقة التي ستسمح بذلك للعمل!؟

مساعدة في تقدير كبير.

يعتبر.

هل كانت مفيدة؟

المحلول

Mailto: لا تدعم المرفقات رسميا. سمعت أن Outlook 2003 ستعمل مع بناء الجملة هذا:

<a href='mailto:name@domain.com?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(
           "jane@contoso.com",
           "ben@contoso.com",
           "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();
    }

نصائح أخرى

إذا كنت ترغب في الوصول إلى عميل البريد الإلكتروني الافتراضي، فيمكنك استخدام Mapi32.dll (يعمل على نظام التشغيل Windows فقط). ألق نظرة على المجمع التالي:

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("person1@somewhere.com");
mapi.AddRecipientTo("person2@somewhere.com");
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");

هل هذا التطبيق يحتاج حقا إلى استخدام Outlook؟ هل هناك سبب لعدم استخدام مساحة اسم system.net.mail؟

إذا كنت بحاجة فعلا إلى استخدام Outlook (ولن أوصي بذلك لأنه، فأنت تستمد تطبيقك على تبعيات الطرف الثالث التي من المحتمل أن تتغير)، فستحتاج إلى النظر في مساحات أسماء Microsoft.Office

سأبدأ هنا:http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.aspx.

جرب هذا

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}\"", "someone@somewhere.com", @"c:\attachments\file.txt");
proc.Start();

نعم رسميا، لا يدعم بروتوكول Mailto المرفقات. لكن Williwyg أوضح ذلك جيدا هنا أن هناك طريقة للقيام بذلك -فتح عميل البريد الافتراضي مع مرفق

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top