C# MailTo avec pièce jointe?

actuellement, j'utilise la méthode ci-dessous pour ouvrir le compte e-mail outlook des utilisateurs et remplir un e-mail avec le contenu pertinent pour l'envoi:

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

je veux cependant, être en mesure de remplir le courriel avec un fichier joint.

quelque chose comme:

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

Cependant, cela ne semble pas fonctionner. Personne ne sait d'une manière qui permettra!?

Aide grandement apprécier.

Cordialement.

26
demandé sur Dave Cousineau 2009-07-28 20:03:46

5 réponses

mailto: ne supporte pas officiellement les pièces jointes. J'ai entendu Outlook 2003 fonctionnera avec cette syntaxe:

<a href='mailto:name@domain.com?Subject=SubjTxt&Body=Bod_Txt&Attachment=""C:\file.txt"" '>

une meilleure façon de gérer cela est d'envoyer le courrier sur le serveur en utilisant le système .Net.Courrier.Pièce jointe .

    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();
    }
10
répondu Jon Galloway 2017-04-15 17:52:29

si vous voulez accéder au client de messagerie par défaut, vous pouvez utiliser MAPI32.dll (fonctionne sur Windows OS seulement). Regardez l'emballage suivant:

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

Le Code

ressemble à ceci:

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");
50
répondu Alex 2009-08-29 20:14:10

cette application vraiment besoin d'utiliser Outlook? Y a-t-il une raison pour ne pas utiliser le système?Net.Namespace Mail?

si vous avez vraiment besoin D'utiliser Outlook ( et je ne le recommande pas parce qu'alors vous basez votre application sur des dépendances de tiers qui sont susceptibles de changer), vous aurez besoin de regarder dans le Microsoft.Espaces de noms de bureau

je commencerais ici: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.aspx

4
répondu David 2009-07-28 16:09:28

Essayez cette

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();
2
répondu kernowcode 2014-08-27 13:22:34

Officiellement oui, le protocole mailTo ne prend pas en charge les pièces Jointes. Mais Williwyg a très bien expliqué ici qu'il y a une façon de le faire - ouvrir le client de messagerie par défaut avec une pièce jointe

0
répondu Mahesh 2017-05-23 12:09:45