#c# #email #email-attachments
#c# #Адрес электронной почты #вложения электронной почты
Вопрос:
Я добавляю вложение, подобное этому:
System.Web.Mail.MailAttachment attachment = new System.Web.Mail.MailAttachment(AttachmentPath);
System.Web.Mail.MailMessage mailMsg = new System.Web.Mail.MailMessage();
....
mailMsg.Attachments.Add(attachment);
Но я хочу прикрепить его как другое имя, фактическое имя файла очень длинное и запутанное, потому что это временный файл. Я бы хотел, чтобы оно было прикреплено, например, «SalesOrderNo1.pdf», есть ли простой способ сделать это без необходимости создавать копию файла с высоким риском столкновения имен файлов?
(Я не могу использовать System.Net.Mail, потому что мне нужно подключиться к серверам, которые используют неявный SSL, но System.Net.Mail его не поддерживает.)
Комментарии:
Ответ №1:
Вместо этого используйте STMP Mail. System.Web.Mail.MailMessage устарел. Вы можете использовать почтовое сообщение smtp, используя следующий код. С помощью этого вы можете изменить имя вложения. Это полный код для отправки электронной почты с помощью smtp-клиента. Пожалуйста, измените все параметры по мере необходимости
SmtpClient smtpClient = new SmtpClient();
MailMessage message = new MailMessage();
smtpClient.Host = "host name";
smtpClient.Port = 25;
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = new NetworkCredential("user name", "password");
smtpClient.EnableSsl = false;
message.IsBodyHtml = true;
message.Priority = MailPriority.Normal;
message.From = new MailAddress("from email address");
string file = @"your file complete path";
Attachment data = new Attachment(file);
message.Attachments.Add(data);
data.Name = "newfilename";
message.To.Add("testemailaddress");
message.Subject = "test email";
message.Body = "test email";
smtpClient.Send(message);
Комментарии:
1. System.Web.Mail. У MailAttachment нет свойства Name msdn.microsoft.com/pl-pl/library /…
2. ОК.ОК. обновил ответ. на самом деле system.web.mail устарел, я не проверял, использует ли он web или net. теперь я добавил полный ответ.
3. Как я уже писал, я не могу использовать только System.Net.Mail, потому что он не поддерживает неявный SSL, и у меня есть это обязательное требование
Ответ №2:
Вам нужно будет переименовать файл. Если вы хотите избежать конфликтов имен файлов, у вас всегда может быть временная папка, в которую вы копируете файлы и переименовываете их там. Затем прикрепите этот новый файл к своему электронному письму, отправьте электронное письмо и, независимо от того, была ли отправка успешной или нет, удалите файл в конце вашего метода.
В любом случае, удаление вложений после их отправки по электронной почте, вероятно, является хорошей практикой, если вам не нужно сохранять файлы для каких-либо целей аудита.
Комментарии:
1. Копирование / переименование файлов во временной папке это не оптимальное решение, поскольку новая библиотека System.Net.Mail может изменять заголовки вложений, поэтому решение существует. Я думаю, что имена / заголовки вложений были записаны в заголовке почтового сообщения…
2. Я не знал об этом, однако в OP говорится, что он не может использовать
System.Net.Mail
из-за требования неявного SSL.