Как отправить почту с c # - PullRequest
5 голосов
/ 22 января 2010

У меня есть код,

 System.Web.Mail.MailMessage oMailMessage = new MailMessage();
            oMailMessage.From = strFromEmaild;
            oMailMessage.To = strToEmailId;
            oMailMessage.Subject = strSubject;
            oMailMessage.Body = strBody;
            SmtpMail.SmtpServer = "localhost";
            SmtpMail.Send(oMailMessage);

(все переменные имеют значения)

Я установил виртуальные службы SMTP. почему он не может отправлять электронные письма. почему не работает ??

EDIT

public bool SendMail(string strToEmailId, string strFromEmaild, string strSubject, string strBody)
{
    try
    {
        System.Web.Mail.MailMessage oMailMessage = new MailMessage();
        oMailMessage.From = strFromEmaild;
        oMailMessage.To = strToEmailId;
        oMailMessage.Subject = strSubject;
        oMailMessage.Body = strBody;
        SmtpMail.SmtpServer = "SERVERNAME";
        SmtpMail.Send(oMailMessage);

        return true;
     }
     catch (Exception ex)
     {
         return false;
     }
 }

У меня есть этот код. Он работает нормально и возвращает true, но я не получаю письма в папке входящих сообщений.

Что еще может быть не так?

Получение некоторых писем в BadMail Dir по адресу C: \ Inetpub \ mailroot \ Badmail также в Queue Directory и получение писем здесь ... что это значит .. ??

Я обнаружил, что почта может отправляться только на аккаунты Gmail ... почему?

Ответы [ 7 ]

2 голосов
/ 22 января 2010

Как уже упоминалось другими, ваш код в порядке и, скорее всего, что-то в вашей конфигурации SMTP или, возможно, ваш почтовый клиент, на который вы отправляете тестовые письма, помечает их как спам.Если это спам, это достаточно легко понять.Если это что-то с электронной почтой, вы можете перейти в папку mailroot, и там будут некоторые папки с файлами электронной почты вместе с описанием.Посмотрите, есть ли что-нибудь в папке BadMail или папке очереди, откройте их в блокноте и посмотрите, какая ошибка указана, почему они не были отправлены.

1 голос
/ 26 апреля 2013

Здравствуйте, вы можете следовать следующий код:

try
        {
            SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
            client.EnableSsl = true;
            client.Timeout = 100000;
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            client.Credentials = new NetworkCredential("your gmail id", "password");
            MailMessage msg = new MailMessage();
            msg.To.Add(textBoxTo.Text);
            msg.From = new MailAddress("your gmail id");
            msg.Subject = textBoxSubject.Text;
            msg.Body = textBoxMsg.Text;
            Attachment data = new Attachment(textBoxAttachment.Text);
            msg.Attachments.Add(data);
            client.Send(msg);
            MessageBox.Show("Successfully Sent Message.");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
       }
1 голос
/ 22 января 2010

Похоже, что с вашей программой что-то не так. Вероятно, это проблема конфигурации вашей программы и почтового сервера. Я бы попробовал следующее для диагностики проблемы.

  1. Оберните код в блок try / catch и посмотрите, содержит ли сообщение об исключении полезные данные
  2. Используйте 127.0.0.1 вместо localhost, чтобы исключить что-либо сумасшедшее
  3. Убедитесь, что ваш SMTP-сервер работает на стандартном порту (25, я считаю)
1 голос
/ 22 января 2010

Трудно сказать, но одна возможность состоит в том, что вы не включили анонимный доступ на виртуальном SMTP-сервере. Перейдите в диалоговое окно свойств виртуального сервера, выберите вкладку «Доступ», нажмите кнопку «Контроль доступа» и убедитесь, что анонимный доступ включен.

1 голос
/ 22 января 2010

Определите, что это за ошибка:

try
{
 SmtpMail.Send(oMailMessage);
}
catch (Exception ex)
{
//breakpoint here to determine what the error is:
Console.WriteLine(ex.Message);
}

Отсюда, пожалуйста, отредактируйте свой вопрос с деталями этого исключения.

0 голосов
/ 16 апреля 2015

В виртуальном SMTP-сервере Добавьте ограничения ретрансляции и контроль подключений, чтобы ни одно из внешних подключений не допускалось

enter image description here

0 голосов
/ 22 января 2010

вы пробовали 127.0.0.1 вместо Localhost? Также вы проверили, что служба SMTP работает, проверьте эту ссылку для деталей.

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