Отправка электронной почты - ошибка - PullRequest
4 голосов
/ 20 апреля 2011

Я пытаюсь отправить электронное письмо, используя следующий фрагмент кода в приложении Winforms. Имя пользователя и пароль верны и реальны, но замаскированы в коде.

Не знаю, может ли моя локальная машина отправлять электронные письма или нет?

Но, пожалуйста, посоветуйте мне, что мне нужно, чтобы посмотреть конфигурацию моей машины (в IIS)?

ОШИБКА: «Невозможно установить соединение, поскольку целевая машина активно отказала ему в этом. 209.85.143.109:587"

//All Variable Declarations
String senderAddress = string.Empty;
String receiveraddress = string.Empty;
String emailSubject = string.Empty;
String emailMessageText = string.Empty;
MailMessage mail = new MailMessage();
SmtpClient client = new SmtpClient("smtp.gmail.com",587);


private void btnEmail_Click(object sender, EventArgs e)
{

      try
      {
            //Get the Values of Controls

            senderAddress = txtSenderEmail.Text;
            receiveraddress = txtReceiverEmail.Text;
            emailSubject = txtSubject.Text;
            emailMessageText = txtMessageBody.Text;

            //Pass the Values
            mail.From = new MailAddress(senderAddress, "xxxxxxxxxx", System.Text.Encoding.UTF8);
            mail.To.Add(receiveraddress);
            mail.Subject = emailSubject;
            mail.Body = emailMessageText;
            client.UseDefaultCredentials = false;
            client.Credentials = new NetworkCredential("xxxxxxx@gmail.com", "xxxxxx");
            client.EnableSsl = true;
            client.Send(mail);
            System.Windows.Forms.MessageBox.Show("Email Sent Successfully");



      }
      catch (Exception mailException)
      {
            System.Windows.Forms.MessageBox.Show("Message Not Sent ,Error:   " + mailException.Message);
            throw;
      }
      finally
      {

      }



}

Я сделал telnet для обоих портов, и появляется ошибка: Не удалось открыть соединение с хостом.

Пожалуйста, посмотрите на следующее изображение, оно должно дать вам больше ясности,

enter image description here

Ответы [ 4 ]

4 голосов
/ 20 апреля 2011

GMail требует использования SSL .Порт, который вам нужно использовать для TLS / STARTTLS, это 587. Для SSL это 465. Ниже приведен код, который вы можете использовать для отправки электронной почты через командную строку. CommandLine.Utility можно загрузить с CodeProject.

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
using System.ComponentModel;
using CommandLine.Utility;

namespace SmtpClientProgram
{
    class Program
    {        

        static void Main(string[] args)
        {
            Arguments cmdLine = new Arguments(args);        

            SmtpClient mailer = new SmtpClient();

            // --ssl means we are using SSL/TLS

            mailer.EnableSsl = Convert.ToBoolean(cmdLine["ssl"]);

            // -host=smtp.gmail.com

            if (cmdLine["host"] != null)
                mailer.Host = cmdLine["host"];
            else
            {
                Console.WriteLine("Hostname must be specified");
                return;
            }

            // -port=25

            if (cmdLine["port"] != null)
                try
                {
                    mailer.Port = Convert.ToInt32(cmdLine["port"]);
                }
                catch (Exception)
                {
                    Console.WriteLine("Port must be a number between 1 and 65535");
                }
            else
                mailer.Port = 25;

            // -user= -password=
            if (cmdLine["user"] != null && cmdLine["password"] != null)
            {                
                mailer.Credentials = new NetworkCredential(cmdLine["user"], cmdLine["password"]);
            }

            try
            {
                MailMessage mail = new MailMessage();

                mail.From = new MailAddress(cmdLine["from"], cmdLine["name"]);

                if (cmdLine["to1"] != null)
                    mail.To.Add(cmdLine["to1"]);
                else
                    Console.WriteLine("Must specify first TO address");

                if (cmdLine["to2"] != null)
                    mail.To.Add(cmdLine["to2"]);

                if (cmdLine["to3"] != null)
                    mail.To.Add(cmdLine["to3"]);

                if (cmdLine["subject"] != null)
                    mail.Subject = cmdLine["subject"];

                if (cmdLine["body"] != null)
                    mail.Body = cmdLine["body"];

                mailer.Send(mail);

                //mailer.Send(cmdLine["from"], cmdLine["to"], cmdLine["subject"], cmdLine["body"]);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return;
            }
            Console.WriteLine("Success");            
        }
    }
}

Редактировать: Если вы не можете подключиться к порту 587 (служба может быть недоступна), попробуйте 465 с SSL или 25 с SSL.См. здесь для получения справки Gmail по отправке электронной почты .

3 голосов
/ 20 апреля 2011

Кажется, проблема не в вашем коде, а в SMTP-сервере, который вы хотите использовать Проверьте, открыт ли порт 587 на компьютере 209.85.143.109 и принимает ли команды SMTP.

2 голосов
/ 20 апреля 2011

Как правило, это означает, что либо в указанном местоположении не работает почтовый сервер, либо вам необходимо настроить брандмауэры, чтобы пропускать соединение, и настроить маршрутизатор для перенаправления соединений по 587 на нужный IP-адрес сервера в вашей сети.

0 голосов
/ 20 апреля 2011

Похоже, что он собирается на какой-нибудь SMTP-сервер, который пересылает ваш IIS или SMTP-сервер вашей организации.

Если это только для разработки, вы можете использовать функцию каталога PickUP, которая позволит вам тестировать без каких-либо настроек SMTP. В Google

имеется большое количество информации

EDIT

Удалена гугл ссылка. Некоторым людям это не понравилось. Хотя я не хотел никого обидеть, я все же удалился, но мое намерение остается помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...