Отправка вложения, выбранного пользователем с помощью mail

#c# #html #asp.net #email #attachment

#c# #HTML #asp.net #Адрес электронной почты #вложение

Вопрос:

Проблема:

Я хочу, чтобы пользователи могли отправлять мне письма с вложениями. Они могут выбрать файл с помощью кнопки ввода файла в html. Проблема в том, что он не может найти файл. Он отлично работает без вложений.

Я получаю эту ошибку

Не удается найти файл C: Program Files (x 86) ExpressGIPENGLISH .pptx IIS.

У кого-нибудь есть какие-нибудь идеи?

Что я пробовал:

Попытался сначала загрузить файл в это местоположение, но все еще не работает.

Кнопка ввода файла

 <INPUT type=file id=File1 name=File1 runat="server" >amp;nbsp; </asp:Content>
  

Код на C #

 System.Net.Mail.Attachment attachment;
attachment = new System.Net.Mail.Attachment(System.IO.Path.GetFileName(File1.PostedFile.FileName));

MailMessage mail = new MailMessage("d***t@gmail.com", "d***t@gmail.com");

SmtpClient client = new SmtpClient();
client.UseDefaultCredentials = false;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.Port = 587;              
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
client.Credentials = new System.Net.NetworkCredential("d***t@gmail.com", "");

mail.BodyEncoding = Encoding.UTF8;
mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
mail.Subject = TxtOnderwerp.Text;
mail.Body = TxtMail.Text;
mail.Body  = Environment.NewLine   "Van  "   TxtNaam.Text;
mail.Body  = Environment.NewLine   " Deze persoon is te bereiken op het mail adres "   TxtEmail.Text   " of op het nummer "   TxtTel.Text;
mail.Attachments.Add(attachment);

client.Send(mail);
  

Результат: я хочу, чтобы пользователь мог отправить мне письмо с вложением, которое он выбрал сам, которое находится на его компьютере. И что я могу получать почту и открывать вложение. Заранее благодарю вас

Ответ №1:

Ниже приведен полный пример добавления файлов в сообщение электронной почты в качестве вложения без записи их на диск.

 using (SmtpClient client = new SmtpClient())
using (MailMessage message = new MailMessage())
{
    client.Host = "host.com";
    client.Port = 25;
    client.Timeout = 10000;
    client.EnableSsl = false;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential("user", "pass");

    message.From = new MailAddress("email@from.nl", "VDWWD");
    message.To.Add(new MailAddress("email@to.nl"));
    message.Subject = "Your uploaded files";
    message.IsBodyHtml = true;
    message.Body = "<html><head></head><body><font face="arial" size="2"><b>The files you uploaded.</b></font></body></html>";

    //loop all the uploaded files
    foreach (var file in FileUpload1.PostedFiles)
    {
        //add the file from the fileupload as an attachment
        message.Attachments.Add(new Attachment(file.InputStream, file.FileName, MediaTypeNames.Application.Octet));
    }

    //send mail
    try
    {
        client.Send(message);
    }
    catch (Exception ex)
    {
        //handle error
    }
}
  

Ответ №2:

Вам нужно будет сохранить отправленный файл на свой сервер, прежде чем вы сможете добавить его в качестве вложения. Вы также можете добавить вложение из MemoryStream, так что это может быть другой способ без необходимости сохранять сам файл.

Комментарии:

1.… или самый простой способ: использовать непосредственно для создания HttpPostedFile.InputStream Attachment Вам нужно будет сохранить отправленный файл на свой сервер, прежде чем вы сможете добавить его в качестве вложения. Вы также можете добавить вложение из MemoryStream, так что это может быть другой способ без необходимости сохранять сам файл. нет сохранения, нет ненужного MemoryStream

2. @Selvin у вас есть дополнительная информация об этом или пример? Я посмотрел его, и для меня это очень сложно. Начал программировать всего несколько месяцев назад . Заранее благодарю вас

3. Нет, как говорит @Selvin, вам не нужно сначала сохранять его на сервере, чтобы добавить в качестве вложения.