2009-05-14 4 views
0

У меня возникла проблема с почтовым вложением. Я использую элемент управления файловой системой для получения пути файла с локального компьютера.проблема с почтовым вложением

Он дает правильный путь, но, замаскивая файл из любой папки, выдавая ошибку «Неверное вложение электронной почты».

Ниже приводится код ..

protected void sndmail_Click(object sender, EventArgs e) 
    { 
     objmail = new MailMessage(); 
     objmail.From = txt_sender.Text; 
     objmail.To = txt_recipient.Text; 
     objmail.Cc = txt_cc.Text; 
     objmail.BodyFormat = MailFormat.Text; 
     objmail.Priority = MailPriority.High; 
     objmail.Subject = txt_sub.Text; 
     objmail.Body = txt_body.Text; 
     SmtpMail.SmtpServer = "localhost"; 
     SmtpMail.Send(objmail); 
     Response.Write("Mail send successfully..."); 

    } 


    protected void attch_Click(object sender, EventArgs e) 
    { 
     string mypath = System.IO.Path.GetFullPath(FileUpload1.FileName); 
     MessageBox.Show(mypath); 
     MailAttachment attch = new MailAttachment(mypath); 

     objmail.Attachments.Add(attch); 
    } 

Можете ли вы помочь мне понять, почему я вижу эту ошибку?

+0

Будет ли этот код работать вообще? В событии click для кнопки вложения вы ссылаетесь на объект электронной почты, но в событии отправки клика вы создаете новое электронное письмо и отправляете его ... –

ответ

0

objmail = new MailMessage();

objmail.Attachments.Add(new MailAttachment(FileUpload1.PostedFile.FileName)); 
    objmail.From = txt_sender.Text; 
    objmail.To = txt_recipient.Text; 
    objmail.BodyFormat = MailFormat.Text; 
    objmail.Priority = MailPriority.High; 
    objmail.Subject = txt_sub.Text; 
    objmail.Body = txt_body.Text; 
    SmtpMail.SmtpServer = ""; 
    SmtpMail.Send(objmail); 
    Response.Write("Mail send successfully..."); 

теперь его рабочий файл .... используя эту строку ..... (SmtpMail.SmtpServer = "";)

спасибо за ALLL ответы ...

1

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

string fileNameOnServer = Path.Combine("<some writeable path on your server>", FileUpload1.FileName); 
FileUpload1.SaveAs(fileNameOnServer); 

// now you can user fileNameOnServer to attach the file to a mail message 
objMail.Attachments.Add(new Attachment(fileNameOnServer)); 
+0

no sir его не работает .. –

1

Когда objmail.Attachments.Add(attch); код выполняется, переменная objmail не инстанцирован и, следовательно, вы получаете сообщение об ошибке.

Эта строка кода должна быть написана в sndmail_Click методе после objmail = new MailMessage();

Пожалуйста, обратите внимание на то, что attch является локальной переменной в методе attch_Click и не будет доступен в методе sndmail_Click. Вы должны сделать эту переменную доступной для обоих методов, поэтому объявите вместе с тем, где вы объявили переменную objmail.

Edit:

Однако, как Фредрик изложил в своем ответе вы должны сохранить файл на сервере в методе attch_Click и в методе sndmail_Click добавить сохраненный файл в objmail.Attachments коллекции.

+0

нет sir его все еще дает ту же ошибку. –

+0

@ Aarsh - Вам нужно объединить и ответы Фредрика, и мои ответы. Вам нужно сохранить файл на сервере в методе attch_Click (как справедливо упомянул Фред), а в sndmail_Click выбрать сохраненный файл и добавить в коллекцию objmail.Attachments перед вызовом SmtpMail.Send (objmail). –

Смежные вопросы