C # Как отправить сообщение gmail? [Дубликат]

вы можете сохранить путь изображения в базе данных или сохранить изображение как BLOB (двоичный - массив байтов) .. это зависит от вашего случая, если ваше приложение является веб-приложением, а затем сохраните путь изображения намного лучше. Но если вы получили клиентское приложение, которое подключается к централизованной базе данных, вы должны сохранить его как двоичный.

181
задан GEOCHET 28 December 2014 в 17:23
поделиться

21 ответ

Это обычно происходит при попытке входа в систему из другого часового пояса или компьютера IP-адреса. Ваш производственный сервер и почтовый идентификатор, который вы использовали, находятся в другом часовом поясе. Выберите любое из одного решения:

1) Войдите на рабочий сервер через удаленный доступ и войдите в gmail один раз с вашими учетными данными. Они запросят подтверждение, подтвердят его и выйдут из системы.

Или 2) войдите в gmail на свой локальный компьютер, выполните следующие действия Link и выберите , чтобы просмотреть это действие и предпринять правильные действия.

129
ответ дан HEGDE 15 August 2018 в 14:34
поделиться

просто включите настройку или gmail. см. ниже заданное изображение:

1
ответ дан Alexandru Marculescu 15 August 2018 в 14:34
поделиться

Я использовал все вышеупомянутые решения, но в конечном итоге работал только после того, как я включил IMAP-доступ из настроек Gmail Ссылка на включение доступа IMAP в настройках gmail

Конечно, точки в других решениях тоже требовались.

-1
ответ дан AndroidMechanic - Viral Patel 15 August 2018 в 14:34
поделиться
  • 1
    Это не помогло мне. Включение IMAP позволяет вам читать почтовые сообщения Gmail от других почтовых клиентов, таких как Outlook, Thunderbird. – kimbaudi 11 October 2016 в 22:20

Привет, у меня была такая же проблема,

, что я сделал для ее решения. заключается в том, чтобы включить менее безопасное приложение. после подключения к моей учетной записи gmail. Я ввел эту ссылку: https://www.google.com/settings/security/lesssecureapps

Затем включите защищенное приложение, и оно сработало. было сказано выше

10
ответ дан Barak Rosenfeld 15 August 2018 в 14:34
поделиться

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

случай 1: когда пароль неверен

случай 2: при попытке войти в систему из приложения App

3: когда вы пытаетесь войдите в домен из другого домена, кроме вашего часового пояса / домена / компьютера (Это относится к большинству сценариев при отправке почты из кода).

Существует решение для каждого

решение для случая 1: Введите правильный пароль.

решение 1 для случая 2: перейдите к настройкам безопасности по следующей ссылке https://www.google. com / settings / security / lesssecureapps и включить менее безопасные приложения. Таким образом, вы сможете войти в систему со всех приложений.

решение 2 для случая 2: (см. https://stackoverflow.com/a/9572958/52277 ) включить два -факторная аутентификация (ака двухэтапная аутентификация), а затем генерировать пароль для приложения. Используйте этот вновь сгенерированный пароль для аутентификации через SMTP.

решение 1 для случая 3: (Это может быть полезно) вам необходимо просмотреть действие. но анализ активности не будет полезен из-за последних стандартов безопасности, ссылка не будет полезна. Итак, попробуйте приведенный ниже случай.

Решение

2 для случая 3: Если вы размещали код где-то на рабочем сервере, и если у вас есть доступ к серверу производства, чем подключение удаленного рабочего стола к производственному серверу и попытка для входа в систему один раз из браузера производственного сервера. Это добавит excpetioon для входа в google, и вам будет разрешен вход в систему из кода.

Но что, если у вас нет доступа к серверу производства. попробуйте решение 3

решение 3 для случая 3: Вы должны разрешить вход с другого часового пояса / ip для своей учетной записи google.

сделать это, следуя ссылке ] https://g.co/allowaccess и разрешить доступ, нажав кнопку продолжения.

И все. Ну вот. Теперь вы сможете входить в систему с любого компьютера и любым способом приложения в свою учетную запись google.

208
ответ дан Community 15 August 2018 в 14:34
поделиться
  • 1
    Решение 2! Ты маленькая красавица! – George Harnwell 22 April 2015 в 14:55
  • 2
    Ссылка lesssecureapps выше помогла :) – Gautam Jain 30 October 2015 в 13:27
  • 3
    Решение 2 работало совершенным обаянием! – Venkat 15 November 2015 в 11:19
  • 4
    ТЫ МУЖЧИНА!!!! Работал для меня: решение 3 для случая 3 – Thomas 22 December 2015 в 16:37
  • 5
    сайт, размещенный на лазуре, должен следовать решению 3 для случая 3: окончательная ссылка, которая помогает g.co/allowaccess – Ravi Anand 21 January 2016 в 15:14

Что работало для меня, так это активировать опцию для менее безопасных приложений (я использую VB.NET)

Public Shared Sub enviaDB(ByRef body As String, ByRef file_location As String)
        Dim mail As New MailMessage()
        Dim SmtpServer As New SmtpClient("smtp.gmail.com")
        mail.From = New MailAddress("from@gmail.com")
        mail.[To].Add("to@gmail.com")
        mail.Subject = "subject"
        mail.Body = body
        Dim attachment As System.Net.Mail.Attachment
        attachment = New System.Net.Mail.Attachment(file_location)
        mail.Attachments.Add(attachment)
        SmtpServer.Port = 587
        SmtpServer.Credentials = New System.Net.NetworkCredential("user", "password")
        SmtpServer.EnableSsl = True
        SmtpServer.Send(mail)
    End Sub

. Войдите в свою учетную запись, а затем перейдите на страницу google.com. / настройки / безопасность / lesssecureapps

2
ответ дан Edgar 15 August 2018 в 14:34
поделиться

Комментарий Tomasz Madeyski - это то, что исправило мою проблему ... он говорит, что существует ошибка в SetDefaultCredential, он говорит:

«Проблема в том, что в SetDefaultCredentials установлен этот код: это. transport.Credentials = значение? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials: (ICredentialsByHost) null, что переопределяет учетные данные, установленные установщиком учетных данных. Для меня это выглядит как ошибка SmtpClient «

, если вы поместили smtpClient.UseDefaultCredentials = false после набора учетных данных ... эта строка устанавливает нулевые эти учетные данные ...

0
ответ дан FabianSilva 15 August 2018 в 14:34
поделиться

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

6
ответ дан fortran 15 August 2018 в 14:34
поделиться
  • 1
    У меня не было двухэтапного разрешения для этой учетной записи и возникла эта проблема. – Shiv 24 April 2015 в 05:45

Ниже мой код. У меня также была такая же ошибка, но проблема в том, что я неправильно дал свой пароль. Нижеприведенный код будет работать отлично. Попробуйте

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");             
            mail.From = new MailAddress("fromaddress@gmail.com");
            mail.To.Add("toaddress1@gmail.com");
            mail.To.Add("toaddress2@gmail.com");
            mail.Subject = "Password Recovery ";
            mail.Body += " <html>";
            mail.Body += "<body>";
            mail.Body += "<table>";
            mail.Body += "<tr>";
            mail.Body += "<td>User Name : </td><td> HAi </td>";
            mail.Body += "</tr>";

            mail.Body += "<tr>";
            mail.Body += "<td>Password : </td><td>aaaaaaaaaa</td>";
            mail.Body += "</tr>";
            mail.Body += "</table>";
            mail.Body += "</body>";
            mail.Body += "</html>";
            mail.IsBodyHtml = true;
            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential("sendfrommailaddress.com", "password");
            SmtpServer.EnableSsl = true;
            SmtpServer.Send(mail);

Вы можете ссылаться на него в мой блог

3
ответ дан Ganesh Pillai N 15 August 2018 в 14:34
поделиться
  • 1
    Я использую тот же код, который работает на моей локальной машине, но не работает на сервере. Получение ошибки Для SMTP-сервера требуется безопасное соединение, или клиент не прошел аутентификацию. Ответ сервера: 5.5.1 Требуется аутентификация. . – Akshay Chawla 4 June 2017 в 15:03
  • 2
    Я связался с моим хостинг-провайдером, которого они сказали: Мы могли видеть, что вы настроили третью часть SMTP (smtp.gmail.com), которая не будет поддерживаться в нашей общей серверной среде. Из-за чрезмерного злоупотребления почтовой функцией или спама, функция почты не поддерживается. Вы можете отправлять электронную почту с помощью PHPMailer, который очень популярен и часто используется. , но мой сайт построен в mvc c #, поэтому как я могу использовать phpmailer? – Akshay Chawla 4 June 2017 в 15:15

Просто выполните шаг в электронной почте google и включите менее безопасные приложения.

8
ответ дан George Stocker 15 August 2018 в 14:34
поделиться

У меня была та же проблема для приложения, развернутого в Microsoft Azure.

SmtpException: для SMTP-сервера требуется безопасное соединение или клиент не прошел аутентификацию. Ответ сервера: 5.5.1 Требуется аутентификация.

Сначала я утвердил все неизвестные устройства (некоторые ip-адреса, происходящие из Ирландии) на следующей странице (подписанный как пользователь gmail): https://security.google.com/settings/u/1/security/secureaccount

Я использовал следующие настройки для клиента:

var client = new SmtpClient("smtp.gmail.com");
client.Port = 587;
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("my_user_name@gmail.com", "my_password"); 

Он начал работать только после того, как я установил следующее свойство на smtp-client:

client.TargetName = "STARTTLS/smtp.gmail.com";
2
ответ дан haiiaaa 15 August 2018 в 14:34
поделиться

У меня есть ранее работающий код, который теперь вызывает эту ошибку. Нет пароля. Нет необходимости конвертировать сообщение в base64. Оказывается, мне нужно сделать следующее:

  1. Отключить двухфакторную аутентификацию
  2. Установить «Разрешить менее безопасные приложения» в ON
  3. Войти к вашей учетной записи gmail с рабочего сервера
  4. Go здесь , а также для подтверждения активности входа в систему
  5. Запустите приложение на рабочем сервере

Рабочий код

    public static void SendEmail(string emailTo, string subject, string body)
    {
        var client = new SmtpClient("smtp.gmail.com", 587)
        {
            Credentials = new NetworkCredential("youremail@gmail.com", "secretpassword"),
            EnableSsl = true
        };

        client.Send("youremail@gmail.com", emailTo, subject, body);
    }

Отключение двухфакторной аутентификации

Установите «Разрешить менее безопасные приложения» на ON (на той же странице, необходимо для прокрутки вниз)

1
ответ дан Jeson Martajaya 15 August 2018 в 14:34
поделиться

Я попробовал все предложения, найденные здесь, начиная с включения менее безопасных приложений, до пробного порта 587 ... ничего не получилось. Наконец, я просто прокомментировал строку UseDefaultCredentials = false. Все работало, если я не касался этого логического.

1
ответ дан Kris Coleman 15 August 2018 в 14:34
поделиться
  • 1
    то же самое здесь .. я не могу поверить, что одна линия заняла час у меня! – Wahid Masud 7 June 2018 в 09:35

Вы должны запретить менее безопасные приложения для доступа к своей учетной записи google.

:

https://myaccount.google.com/lesssecureapps

0
ответ дан MohammadSoori 15 August 2018 в 14:34
поделиться

Если вы используете gmail.

  • 1-logon к вашей учетной записи 2- просмотрите эту ссылку 3- Разрешите менее безопасные приложения: ON

Наслаждайтесь ....

1
ответ дан Muhammad Azeem 15 August 2018 в 14:34
поделиться

Я - приложение для Google для бизнеса, и я провожу последние пару часов, только имея дело с этим, даже после всех правильных настроек (smtp, port, enableSSL и т. д.). Вот что сработало для меня и веб-сайтов, которые бросали ошибку 5.5.1 при попытке отправить электронное письмо:

  1. Войдите в свой admin.google.com
  2. Нажмите SECURITY & lt; - если это не видно, затем нажмите «БОЛЬШЕ УПРАВЛЕНИЯ» и добавьте его из списка
  3. Нажмите «Основные настройки»
  4. Прокрутите вниз до нижней части основных настроек , нажмите ссылку: «Перейти к настройкам для менее безопасных приложений»
  5. Выберите вариант № 3: Обеспечьте доступ к менее безопасным приложениям для всех пользователей (не рекомендуется)
  6. Нажмите SAVE в нижней части окна

После этого мои электронные письма с сайта снова работали. Удачи!

0
ответ дан RichieMN 15 August 2018 в 14:34
поделиться

Возможно, вам понадобится создать / сгенерировать определенный пароль APP из gmail. приложение или сценарий будут использовать этот новый пароль вместо обычного пароля. Ваш обычный пароль все равно будет работать для вас.

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

https://support.google.com/accounts/answer/185833?hl=ru

В принципе вы можете сделать это здесь: https://security.google.com/settings/security/apppasswords

0
ответ дан samiup 15 August 2018 в 14:34
поделиться

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

После входа на ваш адрес электронной почты, ЩЕЛКНУТЬ ЗДЕСЬ

Это приведет вас к следующая страница

84
ответ дан Sayka 15 August 2018 в 14:34
поделиться
  • 1
    Сайка - сегодняшний герой! Большое спасибо. – Bonus Kun 4 April 2016 в 14:09
  • 2
    Это работает и для меня, спасибо @ Сакья! – Rahul Hendawe 22 September 2016 в 05:25
  • 3
    Кроме того, если у вас есть собственный домен, пользователи сначала должны быть включены администратором домена, чтобы разрешить доступ к менее безопасным приложениям. Если вы являетесь администратором домена, перейдите по следующей ссылке, чтобы включить этот admin.google.com/AdminHome#ServiceSettings/… – user551113 20 February 2017 в 12:51
  • 4
    Этот ответ велик. Отлично работает. Спасибо. – Thomas.Benz 15 March 2017 в 20:48

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

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

В этом первом фрагменте кода ниже обратите внимание, где находится строка «Credentials = creds». Эта реализация будет генерировать ошибку, на которую ссылается этот вопрос, даже если у вас есть все, что было настроено правильно.

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
        {
            Host = Emailer.Host,
            Port = Emailer.Port,
            Credentials = creds,
            EnableSsl = Emailer.RequireSSL,
            UseDefaultCredentials = false,
            DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
        }

Однако, если вы переместите вызов установщика учетных данных в нижнюю часть, письмо будет отправлено без ошибок , Я не внес изменений в окружающий код ... то есть ... имя пользователя / пароль и т. Д. Очевидно, что либо EnableSSL, UseDefaultCredentials, либо метод DeliveryMethod зависят от установленных учетных данных ... Я не тестировал все, чтобы выяснить, какой из них был.

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
        {
            Host = Emailer.Host,
            Port = Emailer.Port,
            EnableSsl = Emailer.RequireSSL,
            UseDefaultCredentials = false,
            DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
            Credentials = creds
        }

Надеюсь, это поможет спасти кого-то еще некоторые головные боли в будущем.

16
ответ дан user1011627 15 August 2018 в 14:34
поделиться
  • 1
    В моем случае у меня была такая же проблема, как и у вас, переупорядочивая код, так что Credentials надолго работал для меня. – Dev 24 March 2016 в 09:55
  • 2
    Я не могу в это поверить, но это сработало! Я включил 2-шаг, потому что не хотел включать менее безопасный флаг, но до того, как я поместил Credential last перед отправкой, он не захотел работать. Невероятно! – Čikić Nenad 6 February 2017 в 15:47
  • 3
    Это решает проблему. Большое спасибо! – hubert17 3 September 2017 в 07:36
  • 4
    Проблема в том, что в установщике UseDefaultCredentials есть этот код: this.transport.Credentials = value ? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials : (ICredentialsByHost) null;, который переопределяет credentials, установленный установщиком Credentials. Для меня это выглядит как ошибка SmtpClient – Tomasz Madeyski 13 November 2017 в 15:21
  • 5
    @TomaszMadeyski это должен быть ответ вместо комментария! это моя проблема ... как, черт возьми, я могу думать, что если я установлю учетные данные на конструкторе, а затем снова присваиваю ложное значение UseDefaultCredentials = false, это переопределяет учетные данные ... сумасшедший !! но это происходит ... спасибо youuuuu – FabianSilva 23 February 2018 в 11:16

Я действительно посмотрел на множество идей, единственное решение было таким образом (работает с разными провайдерами электронной почты):

            try
        {
            ViewProgressbar("Try to connect mail-server...", progressBar1.Value = 20);
            string host = dsProvider.Rows[y]["POP_hostOut"].ToString();
            int port = int.Parse(dsProvider.Rows[y]["POP_portOut"].ToString());  //587
            string[] email = von1.Split('@');
            string userName = (dsProvider.Rows[y]["login"].ToString() == "email[0]@email[1]")? email[0]+"@"+email[1] : email[0];
            string password = layer.getUserPassword(listSender.SelectedValue.ToString());
            SmtpClient client = new SmtpClient(host, port);
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            //A idea from MSDN but it not works. You got the "The server response was: 5.5.1 Authentication Required."
            //System.Net.NetworkCredential myCreds = new System.Net.NetworkCredential(userName, password, host);
            //System.Net.CredentialCache cache = new System.Net.CredentialCache();
            //cache.Add(host, port, "NTLM", myCreds);
            ///cache.GetCredential(host, port, "NTLM");   //NTLM
            client.Credentials = new System.Net.NetworkCredential(userName, password);
            client.Host = host;
            client.Port = port;
            client.EnableSsl = true;
            client.Send(message);
            ViewProgressbar();
        }
        catch (SmtpException ex)...
0
ответ дан Walter 15 August 2018 в 14:34
поделиться

попробуйте изменить хост, это новый, я получил эту конфигурацию mozilla thunderbird

Host = "smtp.googlemail.com"

, которая работает для меня

-5
ответ дан w͏̢in̡͢g͘̕ed̨p̢͟a͞n͏͏t̡͜͝he̸r̴ 15 August 2018 в 14:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: