Comment ajouter une pièce jointe à un courrier électronique à l'aide de System.Net.Mail?
J'ai un document excel représenté comme un byte[] et je suis désireux de les envoyer en tant que pièce jointe dans un email.
Je vais avoir un peu de difficulté à la construction de la pièce jointe.
Je peux créer un Attachement a la suivante constructeurs:
(Stream contentStream, ContentType contentType)
(Stream contentStream, string name)
(Stream contentStream, string name, string mediaType)
Mon idée pour le moment est de créer un MemoryStream du byte[] et passer à la méthode qui crée la pièce jointe.
Malheureusement je ne peut pas voir un moyen d'obtenir de la destination nom de fichier et le type de contenu à partir de la MemoryStream et je ne peux pas voir comment fournir le bon type de contenu. Il y a des options pour le format texte, Pdf, Rtf, etc, mais aucun que je peux voir, que de sauter immédiatement à moi comme celui que je dois utiliser pour un document Excel.
Le plus proche que je peux trouver est MediaTypeNames.Application.Octet qui stipule:
L'Octet membre désigne que la
la pièce jointe contient binaire générique
les données.
Cependant, même si ce n'est le seul à l'utiliser, sauf s'il peut être passé comme une propriété du Ruisseau puis ma méthode pour l'envoi d'e-mails ne seront en mesure d'envoyer un byte[] comme un document Excel...
Est là peut-être une autre sorte de Flux que je pourrais utiliser? Ou vais-je créer mon propre type de Flux qui a les détails dont j'ai besoin.
Sûrement quelqu'un a fait cette chose avant et sûrement que Microsoft aurait réfléchi à ce niveau....
Toute aide serait grandement appréciée.
Mise à jour:
Merci de ne pas voter pour toutes les réponses qui utilise les constructeurs qui prennent le nom de fichier sous forme de chaîne. Je vais vraiment avoir besoin d'aide, à l'aide de ceux qui prennent un Ruisseau...je veux éviter d'avoir à écrire le fichier sur le disque, e-mail, puis supprimez-le immédiatement. Puisqu'il y a une méthode qui me permet de faire ce que je voudrais l'utiliser, si possible.
Solution De Mise À Jour
Conrad réussi à trouver ce que je cherchais! Tas merci man!
Je vais document de la solution proposée juste au cas où quelque chose arrive à tout le contenu sur le lien fourni.
De crédit pour cette solution va à www.systemnetmail.com
static void AttachmentFromStream()
{
//create the mail message
MailMessage mail = new MailMessage();
//set the addresses
mail.From = new MailAddress("[email protected]");
mail.To.Add("[email protected]");
//set the content
mail.Subject = "This is an email";
mail.Body = "this content is in the body";
//Get some binary data
byte[] data = GetData();
//save the data to a memory stream
MemoryStream ms = new MemoryStream(data);
//create the attachment from a stream. Be sure to name the data
//with a file and
//media type that is respective of the data
mail.Attachments.Add( new Attachment( ms, "example.txt", "text/plain" ));
SmtpClient smtp = new SmtpClient("127.0.0.1");
smtp.Send(mail);
}
Dans mon cas, cela signifie juste que je vais devoir changer ma méthode de prendre le nom de fichier et fileformat comme des chaînes de caractères. Je vais essayer à l'aide de l'Octet...mais à défaut, je vais passer dans la langue officielle de type MIME.
Toutes choses considérées, c'est plutôt une solution évidente...mais j'apprécie l'aider à le résoudre...et la bonne chose est que cette solution sera documentée pour les futurs programmeurs qui ont le même problème.
Merci encore à tous pour votre aide!
source d'informationauteur mezoid
Vous devez vous connecter pour publier un commentaire.
La pièce jointe constructeur a en effet un constructeur qui fait ce que vous avez besoin. Je suis en supposant que vous utilisez le Système.Net.Classe MailMessage .NET Framework 2. Si oui lire ce lien pour des exemples de code de ce que vous avez besoin
Le nom du paramètre dans la pièce Jointe constructeur est le nom qui sera affiché pour la pièce jointe dans l'e-mail du destinataire.
Ainsi, vous pouvez choisir librement le nom de paramètre (d'extension .xls de préférence), et de définir la mediaType paramètre "application/vnd.ms-excel", qui est définie Le type MIME pour les fichiers excel.
--------------- Je suppose que im tort, c'est si vous avez un fichier que vous voulez joindre ---------------
il semble qu'il y est un exemple d'envoi de mail avec une pièce jointe ici:
http://www.aspnettutorials.com/tutorials/email/email-attach-aspnet2-csharp.aspx
J'espère que c'est ce que vous cherchez.
Depuis le lien de la accepté de répondre à est parti, ici c'est à partir de la Wayback Machine
TL;DR:
mail.Attachments.Add(new Attachment(contentStream, "yourfilename.txt", "text/plain"));
Complet: