#c# #email #attachment #email-attachments
#c# #Адрес электронной почты #вложение #электронная почта-вложения
Вопрос:
Я создал консольное приложение C # и не могу отправить электронное письмо с вложенным файлом с именем «testfile» и без расширения.
Он успешно отправляет, но только с первым вложением («test.png») Как я могу отправить этот файл?
Вот мой код:
internal static void SendTest()
{
MailMessage mail = new MailMessage("Punter@gmail.com", "Michael378@live.com",
"Success", "Attachment email");
SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com", 587);
SmtpServer.Credentials = new System.Net.NetworkCredential("Punter@gmail.com", "BrudoTass");
SmtpServer.EnableSsl = true;
string test1 = @"C:UsersAdminDesktoptest.png"; //Picture
string test2 = @"C:UsersAdminDesktoptestfile"; //File without extension
var attachment1 = new Attachment(test1);
var attachment2 = new Attachment(test2);
mail.Attachments.Add(attachment1);
mail.Attachments.Add(attachment2);
SmtpServer.Send(mail);
}
Комментарии:
1. Я думаю, что это связано с
gmail
политикой в отношении файлов. Вы не можете отправлять файлы без расширения.2. Я только что попробовал это с .NET 2.0 и .NET 4.5, и это работает с обоими (используя мои сетевые учетные данные, конечно). Ваш код работает без проблем для меня. Я вижу как вложение с расширением, так и без него. Который . Какую версию NET framework вы используете и что именно находится в этом файле (я пробовал это как с пустым файлом без расширения, так и с некоторым текстом)?
3. Вероятно, это не так, но я думаю, что расширением по умолчанию является .file
Ответ №1:
Попробуйте этот способ
foreach (MessageAttachment ma in msg.Attachments)
mail.Attachments.Add(BuildAttachment(ma));
private Attachment BuildAttachment(MessageAttachment ma)
{
Attachment att = null;
if (ma == null || ma.FileContent == null)
return att;
att = new Attachment(new MemoryStream(ma.FileContent), ma.FileName ma.FileType, ma.FileType.GetMimeType());
att.ContentDisposition.CreationDate = ma.CreationDate;
att.ContentDisposition.ModificationDate = ma.ModificationDate;
att.ContentDisposition.ReadDate = ma.ReadDate;
att.ContentDisposition.FileName = ma.FileName;
att.ContentDisposition.Size = ma.FileSize;
return att;
}