كيف يمكنني إضافة مرفق إلى رسالة بريد إلكتروني باستخدام نظام.صافي.البريد ؟

StackOverflow https://stackoverflow.com/questions/527214

سؤال

لدي مستند excel يمثل بايت[] وأنا الرغبة في إرساله كمرفق في رسالة بريد إلكتروني.

أنا أعاني من مشكلة بناء المرفق.

يمكنني إنشاء ملحق الذي يحتوي على المنشئات التالية:

(Stream contentStream, ContentType contentType)
(Stream contentStream, string name)
(Stream contentStream, string name, string mediaType)

فكرتي في هذه اللحظة هو خلق MemoryStream من byte[] و تمريرها إلى الأسلوب الذي يخلق المرفق.

للأسف أنا لا أرى أي طريقة للحصول على المقصود اسم الملف ونوع المحتوى من MemoryStream و أنا أيضا لا يمكن أن نرى كيف أن العرض الصحيح نوع المحتوى.هناك خيارات نص عادي, Pdf, Rtf الخ ولكن لا أستطيع أن أرى أن تقفز على الفور في وجهي مثل واحد أود أن استخدام مستند Excel.

الأقرب يمكن أن تجد MediaTypeNames.التطبيق.الثماني والتي تنص على:

الثماني الأعضاء يعين أن المرفقات تحتوي عام الثنائية البيانات.

ومع ذلك ، حتى إذا كان هذا هو واحد للاستخدام ، ما لم يمكن تمرير مثل خاصية من تيار ثم طريقة إرسال رسائل البريد الإلكتروني فقط سوف تكون قادرة على إرسال بايت[] كما مستند Excel...

هل هناك ربما نوع آخر من تيار يمكنني استخدامه ؟ أم يجب علي أن إنشاء بلدي نوع من تيار له تفاصيل أحتاج.

بالتأكيد هناك شخص ما فعل هذا الشيء من قبل و من المؤكد أن مايكروسوفت قد فكرت في هذا الأمر إلى هذا المستوى....

أي مساعدة سيكون محل تقدير كبير.

تحديث: من فضلك لا تصوت لصالح أي الإجابات التي تستخدم في المنشئات التي تأخذ اسم الملف كسلسلة.أنا حقا تحتاج إلى مساعدة في استخدام تلك التي تأخذ تيار...كنت ترغب في تجنب الحاجة إلى كتابة الملف على القرص, البريد الإلكتروني ومن ثم حذفه فورا.لأنه ليس هناك طريقة تسمح لي أن أفعل ذلك أريد أن استخدام هذا إذا أمكن على الإطلاق.

حل التحديث

كونراد تمكنت من العثور على ما كنت تبحث عنه!وذلك بفضل أكوام الرجل!

أنا فقط الوثيقة المقترحة الحل فقط في حال حدث شيء مضمون في توفيره الرابط.

الفضل في هذا الحل يذهب إلى www.systemnetmail.com

static void AttachmentFromStream()
{

//create the mail message
MailMessage mail = new MailMessage();

//set the addresses
mail.From = new MailAddress("me@mycompany.com");
mail.To.Add("you@yourcompany.com");

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

في حالتي, ذلك يعني أنني يجب أن أغير طريقة اتخاذ اسم الملف و fileformat مثل السلاسل.سأحاول استخدام الثماني واحد...ولكن الفشل أن سوف تمر فقط في نوع MIME.

كل الأمور في الاعتبار, هذا واضح جدا الحل...ولكن أنا لا أقدر المساعدة في حلها...و الشيء الجيد هو هذا الحل سوف تكون موثقة في المستقبل المبرمجين الذين لديهم نفس المشكلة.

شكرا مرة أخرى للجميع على مساعدتكم!

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

المحلول

المرفق منشئ لا بل يكون منشئ لا ما تحتاج.أنا على افتراض أنك تستخدم نظام.صافي.رسالة البريد الدرجة من .NET Framework 2.إذا كان الأمر كذلك قراءة هذا الرابط بعض التعليمات البرمجية ما تحتاج

نصائح أخرى

منذ الرابط من الإجابة المقبولة هو ذهب ، ومن هنا من Wayback Machine

TL;DR: mail.Attachments.Add(new Attachment(contentStream, "yourfilename.txt", "text/plain"));

كامل:

static void AttachmentFromStream()
{

    //create the mail message
    MailMessage mail = new MailMessage();

    //set the addresses
    mail.From = new MailAddress("me@mycompany.com");
    mail.To.Add("you@yourcompany.com");

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

    //send the message
    SmtpClient smtp = new SmtpClient("127.0.0.1");
    smtp.Send(mail);
}
static byte[] GetData()
{
    //this method just returns some binary data.
    //it could come from anywhere, such as Sql Server
    string s = "this is some text";
    byte[] data = Encoding.ASCII.GetBytes(s);
    return data;
}

اسم المعلمة في المرفقات منشئ هو الاسم الذي سيتم عرض المرفقات في البريد الإلكتروني للمستلم.

وهكذا يمكنك أن تختار بحرية اسم المعلمة (ملحق .xls المفضل) ، و تعيين وسائط المعلمة إلى "application/vnd.ms-excel" ، وهو تعريف نوع MIME عن ملفات excel.

--------------- أظن أنني مخطئ, هذا إذا كان لديك الملف الذي تريد إرفاقه ---------------

يبدو أن هناك على سبيل المثال من إرسال البريد الإلكتروني مع المرفقات هنا:

http://www.aspnettutorials.com/tutorials/email/email-attach-aspnet2-csharp.aspx

آمل أن يكون هذا هو ما كنت أبحث عنه.

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