2017-01-24 4 views
1

Мне нужна помощь в кодировании. Я пытаюсь отправить сообщение по электронной почте, но я продолжаю получать сообщение об ошибке после того, как я попытаюсь нажать кнопку и отправить сообщение. Ниже кодирование:C# Отправить сообщение/сообщение/ошибка SMTP

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Net; 
using System.Net.Mail; 


namespace CO6009DissertationV5 
{ 

    public partial class frmSendMsg : Form 
    { 

     public frmSendMsg() 
     { 
      InitializeComponent(); 
     } 

     private void btnSend_Click(object sender, EventArgs e) 
     { 
      SmtpClient client = new SmtpClient(); 
      client.Host = "smtp.gmail.com"; 
      client.Port = 587; 
      client.EnableSsl = true; 

      System.Net.NetworkCredential userpassword = new System.Net.NetworkCredential(); 
      userpassword.UserName = "[email protected]"; 
      userpassword.Password = "password"; 

      client.Credentials = userpassword; 

      MailMessage msg = new MailMessage("[email protected]", "[email protected]"); 
      **msg.To.Add(new MailAddress(txtBoxToEmail.Text));** 
      msg.Body = "<b> Sender's Name: </b>" + txtBoxName.Text + "<p><b> Sender's E-mail: </b>" + txtBoxEmail.Text + "<p><b>Sender's Subject: </b>" + txtBoxSubject.Text + "<p><b>Sender's Message: </b>" + "<p>" + txtBoxMsg.Text; 
      msg.Subject = txtBoxSubject.Text; 
      msg.IsBodyHtml = true; 

      try 
      { 
       client.Send(msg); 
       lblMsgStatus.Text = "<p> Message Successfully Sent </p>"; 
      } 

      catch (Exception ex) 
      { 
       lblMsgStatus.Text = "Send failed"; 
      } 
     } 
    } 
} 

Основная проблема, как представляется, эта строка:

msg.To.Add(new MailAddress(txtBoxToEmail.Text)); 

Поскольку проект продолжает останавливая здесь, давая строку ошибки:

{ "Параметр «Адреса» не может быть пустой строкой. \ r \ nParameter name: addresses "}.

Любая помощь будет принята с благодарностью.

+1

Не вставляйте код с вашим пользователем/паролем здесь! – Pikoh

+1

Не могли бы вы добавить текст сообщения об ошибке, которое вы получили? – Filburt

+0

Также проверьте [Отправка электронной почты в .NET через Gmail] (http://stackoverflow.com/q/32260/205233) и многие другие вопросы, которые уже заданы - очень вероятно, что кто-то столкнулся с вашей ошибкой раньше. – Filburt

ответ

2

Эта линия может не только если txtBoxToEmail.Text не действительный адрес электронной почты

msg.To.Add(new MailAddress(txtBoxToEmail.Text)); 

Если это все еще не ясно, пожалуйста, обернуть код примерки поймать и оценить детали исключения

EDIT: я вижу ваше редактирование, я думаю, что сообщение об исключении «Адреса параметров» не может быть пустой строкой. \ R \ nПараметное имя: адреса «довольно ясно»

0

Лучше проверить вашу электронную почту перед отправкой почты. Пожалуйста, добавьте ниже метода и вызвать его в случае нажатия кнопки, как это:

 if (IsValidEmail(txtBoxToEmail.Text)) 
    { 
      msg.To.Add(new MailAddress(txtBoxToEmail.Text)); 
    } 

метода для проверки электронной почты идентификатора:

static bool IsValidEmail(string email) 
    { 
     try 
     { 
      var addr = new System.Net.Mail.MailAddress(email); 
      return addr.Address == email; 
     } 
     catch 
     { 
      return false; 
     } 
    } 
+0

Это то же самое, что и исходный код, завернутый в try/catch. Это не выполняет какой-либо проверки. OP имеет * уже * завернутый код в блок 'try/catch'. –

+0

@ Panagiotis Kanavos Не могли бы вы указать нулевую проверку в оригинальном коде? – Karthikeyan

+0

@ Panagiotis Kanavos Ответ, который я отправил, будет проверять null. – Karthikeyan

1

сообщения Ошибки довольно ясно - TO адреса текст пуст. Это означает, что txtBoxToEmail.Text пуст.

Вы можете избежать таких проблем в будущем, проверив адрес перед его использованием. Вы можете легко проверить для пустых строк с String.IsNullOrWhitespace, например:

private void btnSend_Click(object sender, EventArgs e) 
{ 
    if (String.IsNullOrWhitespace(txtBoxToEmail.Text)) 
    { 
     MessageBox.Show("To can't be empty!","Invalid Address", 
         MessageBoxButtons.OK,MessageBoxIcon.Error); 
     return; 
    } 
... 

Вы можете добавить более сложные проверки, например, обеспечение, что текст содержит @ характера.

Еще более эффективным решением было бы добавить проверку элементов управления и формы, чтобы пользователь не мог попытаться отправить электронное письмо без ввода правильного ввода.

Windows Forms предоставляет множество способов проверки ввода, как описано в User Input Validation in Windows Forms.

Вы можете обработать событие Validating от txtBoxToEmail, чтобы проверить действительный адрес и не допустить выхода из системы до тех пор, пока адрес не будет указан. Фактически, пример документации - это проверка подлинности электронной почты! :

private void textBox1_Validating(object sender, 
       System.ComponentModel.CancelEventArgs e) 
{ 
    string errorMsg; 
    if(!ValidEmailAddress(textBox1.Text, out errorMsg)) 
    { 
     // Cancel the event and select the text to be corrected by the user. 
     e.Cancel = true; 
     textBox1.Select(0, textBox1.Text.Length); 

     // Set the ErrorProvider error with the text to display. 
     this.errorProvider1.SetError(textBox1, errorMsg); 
    } 
} 

private void textBox1_Validated(object sender, System.EventArgs e) 
{ 
    // If all conditions have been met, clear the ErrorProvider of errors. 
    errorProvider1.SetError(textBox1, ""); 
} 
public bool ValidEmailAddress(string emailAddress, out string errorMessage) 
{ 
    // Confirm that the e-mail address string is not empty. 
    if(String.IsNullOrWhitespace(emailAddress.Length)) 
    { 
     errorMessage = "e-mail address is required."; 
     return false; 
    } 

    // Confirm that there is an "@" and a "." in the e-mail address, and in the correct order. 
    if(emailAddress.IndexOf("@") > -1) 
    { 
     if(emailAddress.IndexOf(".", emailAddress.IndexOf("@")) > emailAddress.IndexOf("@")) 
     { 
     errorMessage = ""; 
     return true; 
     } 
    } 

    errorMessage = "e-mail address must be valid e-mail address format.\n" + 
     "For example '[email protected]' "; 
     return false; 
} 

Образец использует ErrorProvider компонент для отображения восклицательного знака и интерфейса ошибки рядом с входом оскорбительного.

Вы можете найти более подробную информацию о ErrorProvider в How to: Display Error Icons for Form Validation with the Windows Forms ErrorProvider Component

0

Хороший способ проверяет значение txtBoxToEmail.Text. возможно, это пустой или пустой. Затем используйте .To.Add (новый MailAddress (txtBoxToEmail.Text));

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