কিভাবে মেইলমেসেজ অবজেক্টটি ডিস্কে * .eml বা * .msg ফাইল হিসাবে সংরক্ষণ করবেন


88

আমি কীভাবে ডিস্কে মেলেমেসেজ অবজেক্টটি সংরক্ষণ করব? মেলমেসেজ অবজেক্টটি কোনও সংরক্ষণ () পদ্ধতি প্রকাশ করে না।

যদি এটি কোনও ফর্ম্যাট, * .ইএমএল বা *। এমএসজি সংরক্ষণ করে তবে আমার কোনও সমস্যা নেই। কোন ধারণা কিভাবে এই কাজ করতে?

উত্তর:


124

সরলতার জন্য, আমি কেবল একটি সংযোগ আইটেম থেকে একটি ব্যাখ্যা উদ্ধৃত করব :

আপনি প্রকৃতপক্ষে নেটওয়ার্কের পরিবর্তে ফাইল সিস্টেমে ইমেল প্রেরণের জন্য 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>

ইমেল প্রেরণের পরে, আপনার নির্দিষ্ট করা ডিরেক্টরিতে ইমেল ফাইলগুলি যুক্ত হওয়া দেখতে হবে। এর পরে আপনি আলাদা প্রক্রিয়াটি ইমেল বার্তাগুলি ব্যাচ মোডে প্রেরণ করতে পারেন।

আপনার তালিকাভুক্তটির পরিবর্তে খালি নির্মাণকারীর ব্যবহার করতে সক্ষম হবেন, কারণ এটি যেভাবে এটি প্রেরণ করবে না।


4
আমি খুঁজে পেয়েছি যে রায়ান যে পরিমাণ সরবরাহ করেছে তার সাথে সাথে আমার <নেটওয়ার্ক হোস্ট = "..." ইত্যাদিও যুক্ত করা দরকার।
স্টিভেন রজারস

10
আউটপুট। এমএল ফাইলের ফাইলের নাম পরিবর্তন করার কোনও উপায় আছে? আমি এটি নীচের মতো দেখতে না পছন্দ করব: f80f4695-551c-47d7-8879-40ad89707b23.eml ধন্যবাদ!
buzzzzjay

8
যদিও একটি পুরাতন পোস্ট, আমি @ বুজ্জ্বজয়ের শেষ প্রশ্নের উত্তর যুক্ত করতে চাই: এখানে একবার দেখুন: লিঙ্ক
কর্ন হোগারহিজেদে

লিঙ্কটির জন্য ধন্যবাদ, এটি সত্যই সহায়ক!
buzzzzjay

ভাল, এটা আমার জন্য কাজ করে। আরও আমি কীভাবে ক্লায়েন্টের পক্ষে সঞ্চিত ফাইল খোলার জন্য আউটলুক খুলতে পারি।
নির্মাতা

29

ইমেল ডেটাযুক্ত স্ট্রিমে একটি মেইলমেসেজ রূপান্তর করার জন্য এখানে একটি এক্সটেনশন পদ্ধতি রয়েছে's এটি ফাইল সিস্টেম ব্যবহার করার সাথে সাথে এটি হ্যাকের স্পষ্টতই কিছুটা হলেও এটি কাজ করে।

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

তারপরে আপনি সেই স্ট্রিমটি ফেরত নিতে এবং যেমনটি চান তা করতে পারেন, যেমন ডিস্কের অন্য কোনও জায়গায় সংরক্ষণ করা বা একটি ডেটাবেস ক্ষেত্রে সংরক্ষণ করা, বা এমনকি কোনও সংযুক্তি হিসাবে ইমেল করা।


4
হাই Saille ... আপনার কোড ভাল কাজ করে এবং হ্যাঁ এটা eml বা বার্তা ফাইল তৈরি করা হয় কিন্তু আমি খোলা যে মাইক্রোসফট দৃষ্টিভঙ্গিতে :( যে করছেন আপনার সাহায্যের প্রয়োজন হয় না।
রাহুল জৈন

4
.EML ফাইলটি আউটলুকে খোলা উচিত, তবে আপনি যদি না পারেন তবে ফাইল এক্সটেনশনটি .MHT- র নামকরণ করার চেষ্টা করুন, তারপরে এটি ইন্টারনেট এক্সপ্লোরারে খুলুন।
সিল

সেল - এটি কোনও "থেকে" ঠিকানা ছাড়া সংরক্ষণ করা সম্ভব, যাতে এটি ব্যবহারকারীর কাছ থেকে এটি কী খোলা যায়? চিয়ার্স
অ্যান্ডি জোন্স

আপনি এটি চেষ্টা করতে হবে। আমি ধারণা করি আপনার মেইল ​​ক্লায়েন্ট তার সেটিংস অনুসারে উত্তর-ঠিকানা ঠিক করতে চাইবে।
saille

7

আপনি যদি মেলকিট ব্যবহার করেন । শুধু কোড নীচে লিখুন

string fileName = "your filename full path";
MimeKit.MimeMessage message = CreateMyMessage ();
message.WriteTo(fileName);

0

এক কারণে বা অন্য কোনও ক্লায়েন্টের জন্য nd .Message মানগুলি নির্ধারণের আগে আমাকে একটি টেমপ্লেট.মিল দিয়ে সিডিও.ম্যাসেজও লোড করতে হয়েছিল। কিন্তু এটি কাজ করে.

যেহেতু উপরেরটি সি এখানে ভিজিবির জন্য একটি

    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)

স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম! প্রশ্নটি সি # ট্যাগ সহ যেহেতু , অন্যান্য ভাষার উত্তরগুলি সহায়ক নয়, দুঃখিত।
হিল

0

এটা চেষ্টা কর

দয়া করে এই 2 টি রেফারেন্স (মেলবি ব্যবহার করে) ব্যবহার করুন (মেলবিই.মাইম ব্যবহার করে;)

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

    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.