C# 将多个附件发送到邮件

C# 将多个附件发送到邮件,c#,email,C#,Email,我正在向一封电子邮件发送多个附件。但我的要求是使用foreach循环发送文件。这里我通过创建两个attachementcontents和两个文件名发送给attachements,这不是一个完美的代码。请帮帮我。先谢谢你 **Here it is send mail method:** public static void SendMail(EmailDetails ObjEmailDtl){ try { SmtpClient client = new SmtpClient();

我正在向一封电子邮件发送多个附件。但我的要求是使用foreach循环发送文件。这里我通过创建两个attachementcontents和两个文件名发送给attachements,这不是一个完美的代码。请帮帮我。先谢谢你

**Here it is send mail method:**

public static void SendMail(EmailDetails ObjEmailDtl){

try

{

SmtpClient client = new SmtpClient();         

client.DeliveryMethod = SmtpDeliveryMethod.Network;   

client.EnableSsl = false;    

   string hostName = string.Empty;

 using (eCoreDbEntities db = new eCoreDbEntities())

  {
  hostName = db.Parameters.Where(m => m.Name == "SMTP").FirstOrDefault().Value;
  }

 client.Host = hostName;

            client.Port = 25;

            MailMessage msg = new MailMessage();
            msg.From = new MailAddress("contactus@karvyclick.com");
            if (!string.IsNullOrEmpty(ObjEmailDtl.ToMailId))
            {
                string[] arrCC = ObjEmailDtl.ToMailId.Trim().Split(',');
                foreach (var item in arrCC)
                {
                    msg.To.Add(new MailAddress(item));
                }
            }

            if (!string.IsNullOrEmpty(ObjEmailDtl.CCList))
            {
                string[] arrCC = ObjEmailDtl.CCList.Trim().Split(',');
                foreach (var item in arrCC)
                {
                    msg.CC.Add(new MailAddress(item));
                }
            }

            msg.Subject = ObjEmailDtl.Subject;
            msg.IsBodyHtml = true;
            msg.Body = ObjEmailDtl.Body;
            if (ObjEmailDtl.AttachmentContect != null)
            {                   
                Attachment att = new Attachment(new MemoryStream(ObjEmailDtl.AttachmentContect), ObjEmailDtl.AttachmentName);
                msg.Attachments.Add(att);       
            }
            if (ObjEmailDtl.AttachmentContect1 != null)
            {
                Attachment att = new Attachment(new MemoryStream(ObjEmailDtl.AttachmentContect1), ObjEmailDtl.AttachmentName1);
                msg.Attachments.Add(att);
            }
            client.Send(msg);
        }
        catch (Exception ex)
        {
            Common.WriteLog("Common-SendMail", "", ex.Message);
        }

    }
这里是我的模型类,我添加了多个附件内容名和多个文件名

这是我正在创建文件的代码


您应该创建一个表示附件详细信息的类,如下所示

public class AttachmentDetails
{
    public byte[] Content {get;set;}
    public string Name {get;set;}
}
byte[] file1 = Encoding.ASCII.GetBytes(str1.ToString());
byte[] File = Encoding.ASCII.GetBytes(str.ToString());
EmailDetails objEmail = new EmailDetails();
var tomail = db.Parameters.ToList().Where(m => m.Name == "ToList" && 
m.Category == "DynamicReport").FirstOrDefault().Value;
objEmail.ToMailId = tomail;
objEmail.Attachments = new List<AttachmentDetails>();
var attachment = new AttachmentDetails();
attachment.Name = "katalister_daily_report_" + DateTime.Now + ".xls";
attachment.Content = File;
objEmail.Attachments.Add(attachment);

attachment = new AttachmentDetails();
attachment.Name = "OrderDetails_BD.xls";
attachment.Content = file1;
objEmail.Attachments.Add(attachment);

objEmail.Subject = "Katalister Dynamic Report";
objEmail.Body = "&nbsp; Dear Leader,<br/><br/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Please find the attached Katalister Daily Report and Order Details Report.<br/><br/><br/><br/> Team Karvy";
objEmail.CCList = db.Parameters.ToList().Where(m => m.Name == "CCList" && m.Category == "DynamicReport").FirstOrDefault().Value;
//Skipping the other code before this in the method.
msg.Subject = ObjEmailDtl.Subject;
        msg.IsBodyHtml = true;
        msg.Body = ObjEmailDtl.Body;
foreach(var attachment in ObjEmailDtl.Attachments)
{
    Attachment att = new Attachment(new MemoryStream(attachment.Content), attachment.Name);
            msg.Attachments.Add(att);      
}
// Other code in the method.
然后在EmailDetails类中使用此类对象的集合


这将帮助您解决问题。

嗨,库马尔,您能解释一下您需要什么帮助吗?你有什么问题吗?嗨,john,我正在向电子邮件发送两个附件,我需要通过使用foreach循环检查文件来发送此附件。我的朋友建议我必须在我的模型类中创建一个列表。但是我不理解他。请帮助我。现在我通过在模型类中添加两个文件名和两个附件内容名来发送此文件,通过执行此代码来实现冗余。Chetan Ranpariya,非常非常感谢,这正是我想要的,非常好。你让我开心。
public class EmailDetails
{
    public string ToMailId { get; set; }
    public string Subject { get; set; }
    public string Body { get; set; }
    public string CCList { get; set; }
    public List<AttachmentDetails> Attachments {get;set;}
}
byte[] file1 = Encoding.ASCII.GetBytes(str1.ToString());
byte[] File = Encoding.ASCII.GetBytes(str.ToString());
EmailDetails objEmail = new EmailDetails();
var tomail = db.Parameters.ToList().Where(m => m.Name == "ToList" && 
m.Category == "DynamicReport").FirstOrDefault().Value;
objEmail.ToMailId = tomail;
objEmail.Attachments = new List<AttachmentDetails>();
var attachment = new AttachmentDetails();
attachment.Name = "katalister_daily_report_" + DateTime.Now + ".xls";
attachment.Content = File;
objEmail.Attachments.Add(attachment);

attachment = new AttachmentDetails();
attachment.Name = "OrderDetails_BD.xls";
attachment.Content = file1;
objEmail.Attachments.Add(attachment);

objEmail.Subject = "Katalister Dynamic Report";
objEmail.Body = "&nbsp; Dear Leader,<br/><br/>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Please find the attached Katalister Daily Report and Order Details Report.<br/><br/><br/><br/> Team Karvy";
objEmail.CCList = db.Parameters.ToList().Where(m => m.Name == "CCList" && m.Category == "DynamicReport").FirstOrDefault().Value;
//Skipping the other code before this in the method.
msg.Subject = ObjEmailDtl.Subject;
        msg.IsBodyHtml = true;
        msg.Body = ObjEmailDtl.Body;
foreach(var attachment in ObjEmailDtl.Attachments)
{
    Attachment att = new Attachment(new MemoryStream(attachment.Content), attachment.Name);
            msg.Attachments.Add(att);      
}
// Other code in the method.