此处SmtpClient
仅将第一个文件作为附件发送,其余的我不知道。应该有一些时间等待附件发送完整吗?
private static void SendFiles()
{
var client = new SmtpClient("smtp.gmail.com");
client.Port = 587;
client.Credentials = new NetworkCredential("wmitask@gmail.com", "password");
client.EnableSsl = true;
var message = new MailMessage();
message.From = new MailAddress("wmitask@gmail.com");
message.To.Add("wmitask@gmail.com");
message.Subject = "File";
message.Body = "Test";
Attachment attachments = null;
foreach (var file in Directory.GetFiles(programFilesDataDir))
{
attachments = new Attachment(file, MediaTypeNames.Application.Pdf);
}
if (attachments == null)
return;
message.Attachments.Add(attachments);
client.Send(message);
}
答案 0 :(得分:1)
在foreach (var file in Directory.GetFiles(programFilesDataDir))
次迭代中,您每次都在创建一个新实例。因此,只保留添加的最后一个附件。
更改循环,将附件添加到message.Attachments
循环中的for....each
。
答案 1 :(得分:1)
在for
循环中,您为每个附件反复分配attachments
变量,实际上覆盖了之前变量的值。
试试这个:
foreach (var file in Directory.GetFiles(programFilesDataDir))
{
attachments = new Attachment(file, MediaTypeNames.Application.Pdf);
message.Attachments.Add(attachments);
}
if(attachments.Count > 0)
client.Send(message);
但这意味着即使没有文件也可以创建整个消息,然后永远不会发送它。如果您只想在有文件的情况下发送消息,那么如果没有文件,您可以立即退出该方法。在您的方法的顶部:
var files = Directory.GetFiles(programFilesDataDir);
if(files.Length) == 0 return;
然后在创建消息后,您可以遍历files
变量,因为您已经知道有文件。
foreach (var file in files))
{
attachments = new Attachment(file, MediaTypeNames.Application.Pdf);
message.Attachments.Add(attachments);
}
client.Send(message);
答案 2 :(得分:0)
要添加附件,您需要使用:
message.Attachments.Add(new Attachment(AttachTB.Text));
如果你想再添加一次,请再次打电话:
message.Attachments.Add(new Attachment(AttachTB.Text));
message.Attachments.Add(new Attachment(AttachIITB.Text));