2013-12-19 8 views
2

Я пытаюсь отправить электронное письмо и приложение C# (Консоль). На самом деле я бы хотел, чтобы он отправил электронное письмо на любой тип электронной почты, но пока я могу его отправить в учетную запись gmail, я был бы достаточно доволен.Отправка электронной почты gmail

Я просто хочу, чтобы это можно было отправить на учетную запись gmail в настоящее время?

Всего Программа:

namespace EmailAddress 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Program test = new Program(); 
      test.email_send(); 
     } 

     public void email_send() 
     { 
      MailMessage mail = new MailMessage(); 
      SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com"); 
      mail.From = new MailAddress("[email protected]"); 
      mail.To.Add("[email protected]"); 
      mail.Subject = "Test Mail - 1"; 
      mail.Body = "Your attachment is accessible on your computer!"; 

      System.Net.Mail.Attachment attachment; 
      attachment = new System.Net.Mail.Attachment("g:/example1.txt"); 
      mail.Attachments.Add(attachment); 

      SmtpServer.Port = 587; 
      SmtpServer.Credentials = new System.Net.NetworkCredential("your [email protected]", "your password"); 
      SmtpServer.EnableSsl = true; 

      SmtpServer.Send(mail); 
     } 
    } 
} 

Новый код: Не болтаться, но не будет посылать сообщение в почтовый ящик

static void Main(string[] args) 
     { 
      Program test = new Program(); 
      //test.email_send(); 
      test.CreateTestMessage4(); 
     } 

     public void email_send() 
     { 
      MailMessage mail = new MailMessage(); 
      SmtpClient smtp = new SmtpClient("smtp.gmail.com"); 
      mail.From = new MailAddress("[email protected]"); 
      mail.To.Add("[email protected]"); 
      mail.Subject = "Test Mail - 1"; 
      mail.Body = "Your attachment is accessible on your computer!"; 

      System.Net.Mail.Attachment attachment; 

      attachment = new System.Net.Mail.Attachment("g:\\example1.txt"); 
      mail.Attachments.Add(attachment);//list of attachements 

      smtp.Port = 587;//google standard -- most of the time wouldn't not set 
      smtp.EnableSsl = true; 
      smtp.UseDefaultCredentials = true; 
      smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 
      smtp.Credentials = new System.Net.NetworkCredential("*","*"); 

      smtp.Send(mail); 

      Console.WriteLine("-- Sending Email --"); 
      Console.ReadLine(); 
     } 

Может кто-то попробовать этот код и посмотреть, если он работает. По какой-то причине это не работает, поэтому я хотел бы иметь чью-то новую перспективу. Я просто вызываю это в основном методе для экземпляра класса.

public void email_send() 
     { 
      MailMessage mail = new MailMessage(); 
      SmtpClient smtp = new SmtpClient("smtp.gmail.com"); 
      mail.From = new MailAddress("your email address"); 
      mail.To.Add("your email address"); 
      mail.Subject = "Test Mail - 1"; 
      mail.Body = "Your attachment is accessible on your computer!"; 

      System.Net.Mail.Attachment attachment; 

      attachment = new System.Net.Mail.Attachment("g:\\example1.txt"); 
      mail.Attachments.Add(attachment);//list of attachements 

      //smtp.Port = 587;//google standard -- most of the time wouldn't not set 
      //smtp.EnableSsl = true; 
      //smtp.UseDefaultCredentials = true; 
      //smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 
      //smtp.Credentials = new System.Net.NetworkCredential("your address", 
                   "your password"); 

      smtp.Port = 587; 
      smtp.Host = "smtp.gmail.com"; 
      smtp.UseDefaultCredentials = false; 
      smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 
      smtp.EnableSsl = true; 
      smtp.Credentials = new System.Net.NetworkCredential("*", "*"); smtp.Send(mail); 

      Console.WriteLine("-- Sending Email --"); 
      Console.ReadLine(); 
     } 
+2

Отправка _to в account_ и отправка _via в account_ совершенно различны. Кажется, ваш вопрос смешивает эти две вещи. Можете ли вы уточнить, с кем вы столкнулись? –

+1

@Doug Hauf Пожалуйста, оставляйте один вопрос за сообщение. – kaptan

+0

Относительно вашего нового кода. Я никогда не видел, чтобы вы вызывали метод 'email_send()'. Попробуйте вызвать 'test.email_send();' прямо после 'Program test = new Program();' – mason

ответ

2

Ваш код близок:

MailMessage mail = new MailMessage(); 
using (SmtpClient smtp = new SmtpClient("smtp.gmail.com")) { 
    mail.From = new MailAddress("[email protected]"); 
    mail.To.Add("[email protected]"); 
    mail.Subject = "Test Mail - 1"; 
    mail.Body = "Your attachment is accessible on your computer!"; 

    System.Net.Mail.Attachment attachment; 

    attachment = new System.Net.Mail.Attachment("g:\\example1.txt"); 
    mail.Attachments.Add(attachment); 

    smtp.Port = 587; 
    smtp.EnableSsl = true; 
    smtp.UseDefaultCredentials = false; 
    smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 
    smtp.Credentials = new System.Net.NetworkCredential("your [email protected]", "your password"); 

    smtp.Send(mail); 
} 

Теперь о некоторых других ваших вопросов.

Порт 587 используется только для Google. Обычно почтовый сервер, к которому вы подключаетесь, будет сообщать вам, какой порт использовать для SMTP-почты; Google сказал, что есть 587.

Для отправки через другие серверы, как правило, не будет установлен номер порта.

боковые ноты:

  1. SmtpClient реализует интерфейс IDisposable. Поэтому он должен быть завернут в предложение использования, чтобы обеспечить его надлежащее удаление после завершения. Если вы не используете метод .SendAsync().
  2. Я изменил имя переменной от SmtpServer до smtp по двум причинам. Во-первых, соглашение об именах. Переменные внутри метода рекомендуются для верблюжьего случая (forExampleThis). Во-вторых, SmtpServer является неправильным, поскольку объект является SmtpClient. Это очень разные вещи, и это просто плохая практика, чтобы ошибиться в вещах.
+0

Это ошибка, которую я только что получил. Не должен быть пароль, установленный с GMail.Для SMTP-сервера требуется безопасное соединение, или клиент не прошел аутентификацию. Ответ сервера: 5.5.1 Требуется аутентификация. Подробнее на –

+0

@DougHauf: Хорошо .. да. Для этого используется строка 'smtp.Credentials = ...'. Замените '' your [email protected] '' на '" [email protected] "и' "ваш пароль" 'с вашим фактическим паролем gmail. Затем он будет использовать ваши учетные данные. – NotMe

+0

@DougHauf НИКОГДА не размещайте свой пароль на общедоступном веб-сайте. Теперь я могу войти в вашу учетную запись gmail, если захочу. И я мог бы войти в ваши другие сайты, потому что вы, вероятно, использовали один и тот же пароль. Вам необходимо НЕПРАВИЛЬНО изменить пароль gmail и пароль для любых сайтов, на которых вы использовали один и тот же пароль. – mason

2

Вы можете попробовать это, он работает для меня:

SmtpClient SmtpServer = new SmtpClient(); 
SmtpServer.Port = 587; 
SmtpServer.Host = smtp.gmail.com; 
SmtpServer.UseDefaultCredentials = false; 
SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network; 
SmtpServer.EnableSsl = true; 
SmtpServer.Credentials = new System.Net.NetworkCredential("your [email protected]", "your password"); 
Смежные вопросы