Задайте имя вложения электронной почты на C # с помощью System.Web.Mail

#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. msdn.microsoft.com/pl-pl/library/…

Ответ №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.