সি # থেকে সংযুক্তি সহ ইমেল প্রেরণ, সংযুক্তি থান্ডারবার্ডে 1.2 ম অংশ হিসাবে উপস্থিত হবে


113

আমার কাছে একটি সি # অ্যাপ্লিকেশন রয়েছে যা এসএমটিপি ব্যবহার করে এক্সচেঞ্জ 2007 সার্ভারের মাধ্যমে এক্সেল স্প্রেডশিট প্রতিবেদনগুলি ইমেল করে। এটি আউটলুক ব্যবহারকারীদের জন্য সূক্ষ্মভাবে পৌঁছেছে, তবে থান্ডারবার্ড এবং ব্ল্যাকবেরি ব্যবহারকারীদের জন্য সংযুক্তিগুলির নামটি "পার্ট 1.2" হিসাবে নামকরণ করা হয়েছে।

আমি এই নিবন্ধটি খুঁজে পেয়েছি যা সমস্যার বর্ণনা দিয়েছে, তবে মনে হয় না যে আমি কোনও কাজের সমাধান দেব। এক্সচেঞ্জ সার্ভারের আমার নিয়ন্ত্রণ নেই তাই সেখানে পরিবর্তন করতে পারবেন না। সি # শেষের দিকে আমি কি কিছু করতে পারি? আমি শরীরের জন্য সংক্ষিপ্ত ফাইলের নাম এবং এইচটিএমএল এনকোডিং ব্যবহার করার চেষ্টা করেছি কিন্তু কোনও পার্থক্য তৈরি করে নি।

আমার মেইল ​​প্রেরণ কোডটি কেবল এটি:

public static void SendMail(string recipient, string subject, string body, string attachmentFilename)
{
    SmtpClient smtpClient = new SmtpClient();
    NetworkCredential basicCredential = new NetworkCredential(MailConst.Username, MailConst.Password);
    MailMessage message = new MailMessage();
    MailAddress fromAddress = new MailAddress(MailConst.Username);

    // setup up the host, increase the timeout to 5 minutes
    smtpClient.Host = MailConst.SmtpServer;
    smtpClient.UseDefaultCredentials = false;
    smtpClient.Credentials = basicCredential;
    smtpClient.Timeout = (60 * 5 * 1000);

    message.From = fromAddress;
    message.Subject = subject;
    message.IsBodyHtml = false;
    message.Body = body;
    message.To.Add(recipient);

    if (attachmentFilename != null)
        message.Attachments.Add(new Attachment(attachmentFilename));

    smtpClient.Send(message);
}

কোন সাহায্যের জন্য ধন্যবাদ।


আপনি Attachment.Nameসম্পত্তি সংজ্ঞা / পরিবর্তন করার চেষ্টা করেছেন ?
অ্যালেক্স

না, আমি পাইনি - "এমআইএমআই কনটেন্ট টাইপ নামের মানটি অর্জন করে বা সেট করে", কোন মানটি চেষ্টা করার বিষয়ে আপনার কাছে কোনও পরামর্শ আছে? ধন্যবাদ।
জন

Nameযখন সংযুক্তি সহ ইমেল গৃহীত হয় সংযুক্তি নাম রূপে প্রদর্শিত হয়। সুতরাং আপনি কোনও মান চেষ্টা করতে পারেন।
অ্যালেক্স

উত্তর:


115

সংযুক্তি সহ ইমেল প্রেরণের সহজ কোড।

উত্স: http://www.coding-issues.com/2012/11/sending-email-with-attachments-from-c.html

using System.Net;
using System.Net.Mail;

public void email_send()
{
    MailMessage mail = new MailMessage();
    SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
    mail.From = new MailAddress("your mail@gmail.com");
    mail.To.Add("to_mail@gmail.com");
    mail.Subject = "Test Mail - 1";
    mail.Body = "mail with attachment";

    System.Net.Mail.Attachment attachment;
    attachment = new System.Net.Mail.Attachment("c:/textfile.txt");
    mail.Attachments.Add(attachment);

    SmtpServer.Port = 587;
    SmtpServer.Credentials = new System.Net.NetworkCredential("your mail@gmail.com", "your password");
    SmtpServer.EnableSsl = true;

    SmtpServer.Send(mail);

}

21
এগুলি সঠিকভাবে নিষ্পত্তি হয়েছে তা নিশ্চিত করতে আপনার বিবৃতি ব্যবহার করে মেইলমেসেজ এবং শ্রীমতিপ্লিয়েন্টকে মোড়ানো উচিত
অ্যান্ড্রু

1
@ অ্যান্ড্রু - আমি কীভাবে এটি করব?
বাষ্প

আমি এই কোডটি চেষ্টা করেছি এবং আমি এই পোস্টে ত্রুটিটি দেখিয়েছি - stackoverflow.com/questions/20845469/…
বাষ্প

1
@ স্টেমে আপনি এটি করতে পারেনusing(SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com")) { //code goes here using(MailMessage mail = new MailMessage()){ //code goes here } }
শামসির কে

92

স্পষ্টভাবে বিষয়বস্তু বিশৃঙ্খলা ক্ষেত্রগুলি পূরণ করে কৌশলটি করেছে।

if (attachmentFilename != null)
{
    Attachment attachment = new Attachment(attachmentFilename, MediaTypeNames.Application.Octet);
    ContentDisposition disposition = attachment.ContentDisposition;
    disposition.CreationDate = File.GetCreationTime(attachmentFilename);
    disposition.ModificationDate = File.GetLastWriteTime(attachmentFilename);
    disposition.ReadDate = File.GetLastAccessTime(attachmentFilename);
    disposition.FileName = Path.GetFileName(attachmentFilename);
    disposition.Size = new FileInfo(attachmentFilename).Length;
    disposition.DispositionType = DispositionTypeNames.Attachment;
    message.Attachments.Add(attachment);                
}

বিটিডাব্লু , জিমেইলের ক্ষেত্রে আপনার এসএসএল নিরাপদ বা এমনকি বন্দর সম্পর্কে কিছু ব্যতিক্রম থাকতে পারে!

smtpClient.EnableSsl = true;
smtpClient.Port = 587;

2
কেন তুমি না ব্যবহার করেন FileInfoবস্তুর পেতে CreationTime, LastWriteTimeএবং LastAccessTimeবৈশিষ্ট্য? আপনি Lengthযেভাবেই হোক সম্পত্তি পেতে একটি তৈরি করছেন ।
সংপাথ্রিসিস

1
সংযুক্তিটি ভুলে যাবেন না isবিযুক্ত করুন () অথবা এই ফাইলটি লক থেকে যায় এবং আপনি এটিতে ডেটা লিখতে পারবেন না।
মোরা Dominguez

7

সংযুক্তি সহ এখানে একটি সাধারণ মেল প্রেরণ কোড

try  
{  
    SmtpClient mailServer = new SmtpClient("smtp.gmail.com", 587);  
    mailServer.EnableSsl = true;  

    mailServer.Credentials = new System.Net.NetworkCredential("myemail@gmail.com", "mypassword");  

    string from = "myemail@gmail.com";  
    string to = "reciever@gmail.com";  
    MailMessage msg = new MailMessage(from, to);  
    msg.Subject = "Enter the subject here";  
    msg.Body = "The message goes here.";
    msg.Attachments.Add(new Attachment("D:\\myfile.txt"));
    mailServer.Send(msg);  
}  
catch (Exception ex)  
{  
    Console.WriteLine("Unable to send email. Error : " + ex);  
}

আরও পড়ুন সি # এ সংযুক্তি সহ ইমেল প্রেরণ


4

ফাইলটি সনাক্ত করতে সার্ভার.ম্যাপপথ ব্যবহার করে রানাধিরের সমাধানটি সম্পূর্ণ করা হচ্ছে

System.Net.Mail.Attachment attachment;
attachment = New System.Net.Mail.Attachment(Server.MapPath("~/App_Data/hello.pdf"));
mail.Attachments.Add(attachment);

কোথা Server.MapPathথেকে আসে এবং কখন এটি ব্যবহার করা উচিত?
কিম্যাক্স

1
private void btnSent_Click(object sender, EventArgs e)
{
    try
    {
        MailMessage mail = new MailMessage();
        SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");

        mail.From = new MailAddress(txtAcc.Text);
        mail.To.Add(txtToAdd.Text);
        mail.Subject = txtSub.Text;
        mail.Body = txtContent.Text;
        System.Net.Mail.Attachment attachment;
        attachment = new System.Net.Mail.Attachment(txtAttachment.Text);
        mail.Attachments.Add(attachment);

        SmtpServer.Port = 587;
        SmtpServer.Credentials = new System.Net.NetworkCredential(txtAcc.Text, txtPassword.Text);

        SmtpServer.EnableSsl = true;

        SmtpServer.Send(mail);
        MessageBox.Show("mail send");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}

private void button1_Click(object sender, EventArgs e)
{
    MailMessage mail = new MailMessage();
    openFileDialog1.ShowDialog();
    System.Net.Mail.Attachment attachment;
    attachment = new System.Net.Mail.Attachment(openFileDialog1.FileName);
    mail.Attachments.Add(attachment);
    txtAttachment.Text =Convert.ToString (openFileDialog1.FileName);
}

1

আমি এটি করার জন্য একটি সংক্ষিপ্ত কোড তৈরি করেছি এবং আমি এটি আপনার সাথে ভাগ করতে চাই।

এখানে মূল কোড:

public void Send(string from, string password, string to, string Message, string subject, string host, int port, string file)
{

  MailMessage email = new MailMessage();
  email.From = new MailAddress(from);
  email.To.Add(to);
  email.Subject = subject;
  email.Body = Message;
  SmtpClient smtp = new SmtpClient(host, port);
  smtp.UseDefaultCredentials = false;
  NetworkCredential nc = new NetworkCredential(from, password);
  smtp.Credentials = nc;
  smtp.EnableSsl = true;
  email.IsBodyHtml = true;
  email.Priority = MailPriority.Normal;
  email.BodyEncoding = Encoding.UTF8;

  if (file.Length > 0)
  {
    Attachment attachment;
    attachment = new Attachment(file);
    email.Attachments.Add(attachment);
  }

  // smtp.Send(email);
  smtp.SendCompleted += new SendCompletedEventHandler(SendCompletedCallBack);
  string userstate = "sending ...";
  smtp.SendAsync(email, userstate);
}

private static void SendCompletedCallBack(object sender,AsyncCompletedEventArgs e) {
  string result = "";
  if (e.Cancelled)
  {    
    MessageBox.Show(string.Format("{0} send canceled.", e.UserState),"Message",MessageBoxButtons.OK,MessageBoxIcon.Information);
  }
  else if (e.Error != null)
  {
    MessageBox.Show(string.Format("{0} {1}", e.UserState, e.Error), "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
  }
  else {
    MessageBox.Show("your message is sended", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
  }

}

আপনার বোতামে এই জাতীয় জিনিসগুলি
করুন আপনি আপনার জেপিজি বা পিডিএফ ফাইল এবং আরও কিছু যোগ করতে পারেন .. এটি কেবল একটি উদাহরণ

using (OpenFileDialog attachement = new OpenFileDialog()
{
  Filter = "Exel Client|*.png",
  ValidateNames = true
})
{
if (attachement.ShowDialog() == DialogResult.OK)
{
  Send("yourmail@gmail.com", "gmail_password", 
       "tomail@gmail.com", "just smile ", "mail with attachement",
       "smtp.gmail.com", 587, attachement.FileName);

}
}

0

এটা চেষ্টা কর:

private void btnAtt_Click(object sender, EventArgs e) {

    openFileDialog1.ShowDialog();
    Attachment myFile = new Attachment(openFileDialog1.FileName);

    MyMsg.Attachments.Add(myFile);


}

0

আমি রানাধীর রেড্ডি (উপরে) প্রদত্ত কোডটি চেষ্টা করেছি এবং এটি দুর্দান্ত কাজ করেছে। যদি আপনি কোনও সংস্থার কম্পিউটার ব্যবহার করেন যা একটি সীমাবদ্ধ সার্ভার রয়েছে আপনার এসএমটিপি পোর্টটি 25 এ পরিবর্তন করতে হবে এবং আপনার ব্যবহারকারীর নাম এবং পাসওয়ার্ড ফাঁকা রাখতে হবে কারণ তারা আপনার প্রশাসকের দ্বারা স্বয়ংক্রিয়ভাবে পূরণ করবে।

মূলত, আমি ন্যুভেন্ট প্যাকেজ ম্যানেজারের EASendMail ব্যবহার করার চেষ্টা করেছি, কেবল এটি বুঝতে পেরেছিলাম যে এটি 30-দিনের ট্রায়াল সহ সংস্করণের জন্য কোনও বেতন। যদি আপনি এটি কেনার পরিকল্পনা না করেন তবে এটির সাথে আপনার সময়টি কোমর করবেন না। আমি লক্ষ্য করেছি প্রোগ্রামটি EASendMail ব্যবহার করে অনেক দ্রুত ছড়িয়েছে, তবে আমার জন্য, বিনামূল্যে ট্রাম্পড দ্রুত।

শুধু আমার 2 সেন্ট মূল্য।

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