मैं डिस्क पर MailMessage ऑब्जेक्ट कैसे सहेज सकता हूं? MailMessage ऑब्जेक्ट किसी भी सहेजें () विधियों को उजागर नहीं करता है।
मुझे कोई समस्या नहीं है अगर यह किसी भी प्रारूप में बचाता है, * .eml या * .msg। कोई आईडिया कि इसे कैसे किया जाए?
मैं डिस्क पर MailMessage ऑब्जेक्ट कैसे सहेज सकता हूं? MailMessage ऑब्जेक्ट किसी भी सहेजें () विधियों को उजागर नहीं करता है।
मुझे कोई समस्या नहीं है अगर यह किसी भी प्रारूप में बचाता है, * .eml या * .msg। कोई आईडिया कि इसे कैसे किया जाए?
जवाबों:
सादगी के लिए, मैं सिर्फ एक कनेक्ट आइटम से स्पष्टीकरण उद्धृत करूंगा :
आप वास्तव में नेटवर्क के बजाय फ़ाइल सिस्टम पर ईमेल भेजने के लिए SmtpClient को कॉन्फ़िगर कर सकते हैं। आप निम्न कोड का उपयोग करके इस प्रोग्राम को कर सकते हैं:
SmtpClient client = new SmtpClient("mysmtphost"); client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory; client.PickupDirectoryLocation = @"C:\somedirectory"; client.Send(message);
आप इसे अपने एप्लिकेशन कॉन्फ़िगरेशन फ़ाइल में इस तरह सेट कर सकते हैं:
<configuration>
<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="C:\somedirectory" />
</smtp>
</mailSettings>
</system.net>
</configuration>
ईमेल भेजने के बाद, आपको ईमेल फ़ाइलों को आपके द्वारा निर्दिष्ट निर्देशिका में जोड़ा जाना चाहिए। फिर आप बैच मोड में ईमेल संदेश भेजने की एक अलग प्रक्रिया कर सकते हैं।
आपको किसी सूचीबद्ध के बजाय खाली कंस्ट्रक्टर का उपयोग करने में सक्षम होना चाहिए, क्योंकि यह वैसे भी नहीं भेजेगा।
ईएमएल डेटा युक्त स्ट्रीम के लिए एक मेलमेसेज को परिवर्तित करने के लिए यहां एक विस्तार विधि है। इसका स्पष्ट रूप से एक हैक का थोड़ा सा है क्योंकि यह फ़ाइल सिस्टम का उपयोग करता है, लेकिन यह काम करता है।
public static void SaveMailMessage(this MailMessage msg, string filePath)
{
using (var fs = new FileStream(filePath, FileMode.Create))
{
msg.ToEMLStream(fs);
}
}
/// <summary>
/// Converts a MailMessage to an EML file stream.
/// </summary>
/// <param name="msg"></param>
/// <returns></returns>
public static void ToEMLStream(this MailMessage msg, Stream str)
{
using (var client = new SmtpClient())
{
var id = Guid.NewGuid();
var tempFolder = Path.Combine(Path.GetTempPath(), Assembly.GetExecutingAssembly().GetName().Name);
tempFolder = Path.Combine(tempFolder, "MailMessageToEMLTemp");
// create a temp folder to hold just this .eml file so that we can find it easily.
tempFolder = Path.Combine(tempFolder, id.ToString());
if (!Directory.Exists(tempFolder))
{
Directory.CreateDirectory(tempFolder);
}
client.UseDefaultCredentials = true;
client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;
client.PickupDirectoryLocation = tempFolder;
client.Send(msg);
// tempFolder should contain 1 eml file
var filePath = Directory.GetFiles(tempFolder).Single();
// stream out the contents
using (var fs = new FileStream(filePath, FileMode.Open))
{
fs.CopyTo(str);
}
if (Directory.Exists(tempFolder))
{
Directory.Delete(tempFolder, true);
}
}
}
आप तब स्ट्रीम स्ट्रीम लौटा सकते हैं और जैसा आप चाहते हैं, डिस्क पर किसी अन्य स्थान पर सहेजने या डेटाबेस फ़ील्ड में संग्रहीत करने, या यहां तक कि अनुलग्नक के रूप में ईमेल करने सहित।
एक कारण या किसी अन्य क्लाइंट के लिए। असफल होना (उस पद्धति का उपयोग करके एक वास्तविक भेजने के ठीक बाद), इसलिए मैंने अच्छे 'ओएलओ सीडीओ और एडीओडीबी स्ट्रीम में प्लग इन किया। मुझे .Message मान सेट करने से पहले एक टेम्पलेट के साथ CDO.message लोड करना था। लेकिन यह काम करता है।
चूँकि उपरोक्त एक C है यहाँ VB के लिए एक है
MyMessage.From = New Net.Mail.MailAddress(mEmailAddress)
MyMessage.To.Add(mToAddress)
MyMessage.Subject = mSubject
MyMessage.Body = mBody
Smtp.Host = "------"
Smtp.Port = "2525"
Smtp.Credentials = New NetworkCredential(------)
Smtp.Send(MyMessage) ' Actual Send
Dim oldCDO As CDO.Message
oldCDO = MyLoadEmlFromFile("template.eml") ' just put from, to, subject blank. leave first line blank
oldCDO.To = mToAddress
oldCDO.From = mEmailAddress
oldCDO.Subject = mSubject
oldCDO.TextBody = mBody
oldCDO.HTMLBody = mBody
oldCDO.GetStream.Flush()
oldCDO.GetStream.SaveToFile(yourPath)
इसे इस्तेमाल करे
कृपया इन 2 संदर्भों का उपयोग करें (MailBee का उपयोग करके?) (MailBee.Mime का उपयोग करके;)
public static string load(string to,string from,string cc,string bcc,string subject,string body, List<string> reportList,string path, bool HtmlbodyType)
{
try
{
MailBee.Mime.MailMessage msg = new MailBee.Mime.MailMessage();
msg.From.AsString = from;
msg.Subject = subject;
if (HtmlbodyType == true)
{
msg.BodyHtmlText = body;
}
else
{
msg.BodyPlainText = body;
}
string[] receptionEmail = to.Split(new string[] { ",", ";" }, StringSplitOptions.RemoveEmptyEntries);
string[] ccEmail = cc.Split(new string[] { ",", ";" }, StringSplitOptions.RemoveEmptyEntries);
string[] bccEmail = bcc.Split(new string[] { ",", ";" }, StringSplitOptions.RemoveEmptyEntries);
string message = "";
foreach (string To in receptionEmail)
{
msg.To.Add(To);
}
foreach (string CC in ccEmail)
{
msg.Cc.Add(CC);
}
foreach (string Bcc in bccEmail)
{
msg.Bcc.Add(Bcc);
}
for (int x = 0; x < reportList.Count; x++)
{
string fileName = reportList[x];
msg.Attachments.Add(fileName);
}
msg.SaveMessage(path);
return "Success";
}
catch (Exception ex)
{
return ex.Message;
}
}