【问题标题】:How to include gridview values as attachment while sending mail如何在发送邮件时将 gridview 值包含为附件
【发布时间】:2014-11-24 07:24:27
【问题描述】:

我想从第 2 列 [DRAFT PATH] 添加文件名,并在发送邮件时作为附件包含在内。 如何将此详细信息添加为附件,并且我需要在正文中包含文本信息。

对于前;- 在给定的链接https://imageshack.com/i/f0YGXzlvj 中,您可以看到Draft path 中只有一个文件。所以我需要从文件夹中附加该文件..作为附件.. 我还需要包括

[邮件正文]

     Total number of files :    Draft path files
     File1:- file name of `draft path` file

你可以看到其余的单元格是空的..所以不需要在正文中提及..

如果有更多文件,那么我需要按照那个来做..

代码sn-p:-

 private void button2_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Sending Mail. Click Ok!!!", "Mail!!!.");
        string smtpserver = ini.ReadValue("bmail", "smtpserver");
        string email_From = ini.ReadValue("bmail", "email_From");
        string email_Recipient = ini.ReadValue("bmail", "email_Recipient");
        string email_Subject = ini.ReadValue("bmail", "email_Subject");
        string email_Body = ini.ReadValue("bmail", "email_Body");


            try
            {
                new SmtpClient(smtpserver, 25).Send(email_From,
                                      email_Recipient,
                                      email_Subject,
                                      email_Body);
                MessageBox.Show("Email Successfully Sent!!!", "Mail!!!.");
                Environment.Exit(0);
            }

            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

我该怎么做.. 请帮帮我。

【问题讨论】:

  • 什么问题,添加附件还是从路径中检索文件?
  • @mybirthname 我无法添加附件,也不知道如何在邮件正文中包含文件名。
  • @mybirthname 任何想法!!!!!
  • 请各位..这里的任何人...帮帮我!!!
  • 这里检查代码。

标签: c# email email-attachments


【解决方案1】:

您可以发送这样的带有附件的邮件。

SmtpClient smtp = new SmtpClient();
MailMessage msg = new MailMessage();
msg.From = new MailAddress("stacy@gmail.com", "Stacy Kebler");
smtp.Host = "smtp.gmail.com";
smtp.Port = 465;  //set the default smtp port of email provider. you can avoid it if you don't know
smtp.Credentials = new System.Net.NetworkCredential("stacy@gmail.com", "stacy123");
smtp.EnableSsl = true; //Set this to true if the email provider is using SSL encryption 
smtp.Timeout = 10000; //Set the timeout to 10 second

msg.To.Add(new MailAddress("abc@gmail.com","Mr. ABC"));
msg.IsBodyHtml = true; //if the content of body is in HTML format then set it to true.


msg.Subject = "This is a sample message";

StringBuilder sbBody = new StringBuilder();
sbBody.Append("This is the Sample Email <br><br>");
for (int i = 0; i < dataGridView.Rows.Count; i++)
{
    if (dataGridView.Rows[i].Cells["DRAFT_PATH"].Value != null && 
        System.IO.File.Exists(dataGridView.Rows[i].Cells["DRAFT_PATH"].Value.ToString()))
    {
        string path = dataGridView.Rows[i].Cells["DRAFT_PATH"].Value.ToString();
        sbBody.AppendFormat("File {0}:{1}<br>", i + 1, Path.GetFileNameWithoutExtension(path))
        msg.Attachments.Add(new Attachment(path));
    }
}
msg.Body = sbBody.ToString();


smtp.Send(msg);

如果您不想在发送电子邮件时阻止当前线程。然后您可以使用异步方法发送邮件。这不会阻止电子邮件发送过程中的进程。你只需要使用SendAsync() 方法而不是Send()

smtp.SendAsync(msg, "Test Message");

其中第二个参数是该进程的令牌。如果您想在发送电子邮件后进行任何进一步的处理,并且您还要发送多封电子邮件,那么token 将帮助您确定具体的邮件处理过程。

例如:如果您同时发送两封邮件

smtp1.SendAsync(msg1, "Test Message 1");
smtp1.SendCompleted += new SendCompletedEventHandler(this.SendCompletedCallback);


smtp2.SendAsync(msg2, "Test Message 2");
smtp2.SendCompleted += new SendCompletedEventHandler(this.SendCompletedCallback);


private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
    // Get the unique identifier for this asynchronous operation.
    String token = (string) e.UserState;

    if (token == "Test Message 1")
        //This is the First email status
    else if (token == "Test Message 2")
        //This is the second email status
}

如果您想在不分配凭据的情况下发送电子邮件,那么您必须拥有电子邮件服务器的电子邮件网关。

SmtpClient msg = new SmtpClient("username.gateway.com");

【讨论】:

  • 附件正在以一种完美的方式出现.. 但问题是我不需要smtp.Credentials = new System.Net.NetworkCredential("stacy@gmail.com", "stacy123"); 我的意思是没有凭据.. 我该怎么做。请看我的问题..我需要类似的东西..因为我不想提供凭据。我也想在邮件正文中给出.. 文件名.. 就像一行一行..
  • 没有用户名和密码,您无法发送电子邮件,否则我也可以从您的帐户发送假电子邮件。这不可能。我也在更新我的答案。
  • 这是您的私人邮件服务器吗?
  • 要发送没有凭据的电子邮件,您必须有一个电子邮件网关。 stackoverflow.com/a/12490956/3761928
  • 让你设置msg.IsBodyHtml = true;。给我看看你的代码。
猜你喜欢
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 2015-10-24
相关资源
最近更新 更多