C# - SMTP Gmail - problem

0

Cześć,

Przychodzę z problemem wysyłania wiadomości za pomocą metodyki SMTP - GMAIL. Opracowałem funkcjonalność, która nie działa w określonych przypadkach - sieci lokalne, firmy, serwer (opublikowanie API na serwerze). Dla danego konta GMAIL włączona opcja aplikacji nieznanych. Próbowałem wielu sposobów. System wypluwa wyjątek, że nie można rozpoznać nazwy zdalnej hosta 'smtp.gmail.com'

Na pewno spotkaliście się z podobnym problemem, mogę prosić o rady? Dziękuję.

1

Pytanie - czy mówimy o darmowym Gmailu, czy w ramach płatnego google Workspace?

O ile kojarzę, to w tym drugim przypadku administrator musi wyrazić zgodę. Na pewno trzeba odblokować IMAP, ale coś mi świta, że ogólnie dostęp inny niż przez WWW może być wyłączony/zablokowany (a nawet nie jestem pewien, czy nie jest to ustawienie domyślne).

1

System wypluwa wyjątek, że nie można rozpoznać nazwy zdalnej hosta 'smtp.gmail.com'

Twój komputer na którym masz aplikację ma poprawnie skonfigurowany DNS? To nie jest problem z twoim programem, to jest problem z siecią.

0

Za pomocą jakiej biblioteki wysyłasz maile?

W .NET jest standardowa funkcja wysyłania maila, chyba System.Net.Mail. On nie radzi sobie we wszystkich przypadkach. Zdecydowanie lepszym rozwiązaniem jest https://www.nuget.org/packages/MimeKit/ i https://www.nuget.org/packages/MailKit/.

W Gmail darmowym działa bardzo dobrze, tylko pamiętam, że trzeba było zalogować się na Google w przeglądarce i coś włączyć w ustawieniach, nie pamiętam teraz co, ale jak poszukasz, jak skonfigurować standardowy program pocztowy do współpracy z GMail, to tam będzie napisane, co i jak ustawić.

Jak chodzi o samo wysyłanie maila, to Twój program niczym nie różni się od oprogramowania typu Outlook, Thunderbird itp.

Najlepiej to ustaw program pocztowy według info z internetu, jak on będzie wysyłać maile, to Twój program również, nie ma innej opcji.

0

Dodam do wypowiedzi:

private async void sendEmail()
        {
            string emailTitle = "test1";
            string emailMessage = "test2";
            SmtpClient smtpRecipientUser = new SmtpClient();
            smtpRecipientUser.Port = 25;
            smtpRecipientUser.Host = "smtp.gmail.com";
            smtpRecipientUser.EnableSsl = true;
            smtpRecipientUser.Timeout = 10000;
            smtpRecipientUser.DeliveryMethod = SmtpDeliveryMethod.Network;
            smtpRecipientUser.UseDefaultCredentials = false;
            smtpRecipientUser.Credentials = new System.Net.NetworkCredential("username", "#######password");
            string emailRecipient = "emailRecipient";
            MailMessage messageActiveSendUser = new MailMessage(emailRecipient, emailRecipient, emailTitle, emailMessage);
            messageActiveSendUser.Priority = System.Net.Mail.MailPriority.High;
            messageActiveSendUser.BodyEncoding = UTF8Encoding.UTF8;
            messageActiveSendUser.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
            await smtpRecipientUser.SendMailAsync(messageActiveSendUser);
        }

Tak aktualnie wygląda przykładowy kod źródłowy - jeśli uruchomię na lokalnym hoście - wszystko jest w porządku, w momencie publikacji na serwerze (przykładem jest webio) zwracany jest błąd krytyczny w związku z nierozpoznanym zdalnym hostem smtp.gmail.com - muszę spróbować teraz z MimeKit'em.

0

Wrzuciłem dodatkowo MimeKit - lokalnie działa, nie ma problemu, po opublikowaniu na serwerze klapa.

            var email = new MimeMessage();
            email.From.Add(MailboxAddress.Parse("[email protected]"));
            email.To.Add(MailboxAddress.Parse(emailrecipient));
            email.Subject = "test";
            email.Body = new TextPart(TextFormat.Plain) { Text = "test" };
            using var smtp = new SmtpClient();
            smtp.Connect("smtp.gmail.com", 587, SecureSocketOptions.StartTls);
            smtp.Authenticate("[email protected]", "password");
            smtp.Send(email);
            smtp.Disconnect(true);
0
public async static void SendEmail()
        {
            MailAddress to = new MailAddress("adresto");
            MailAddress addressFrom = new MailAddress("[email protected]", "***");
            MailMessage message = new MailMessage(addressFrom, to)
            {
                Subject = "***",
                Body = $"*******",
                IsBodyHtml = true
            };

            SmtpClient client = new SmtpClient
            {
                Host = "smtp.gmail.com",
                Port = 587,
                UseDefaultCredentials = false,
                Credentials = new NetworkCredential("****", "******"),
                EnableSsl = true
            };
            
            try
            {
                await client.SendMailAsync(message);
            }

            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }

Coś takiego kiedyś napisałem

1

Czy wysłanie maila z innej skrzynki niż GMail na hostingu działa poprawnie?

Prawdopodobnie w aplikacji wszystko masz dobrze, tylko na hostingu jest jakiś problem.

Jaki jest system operacyjny i aplikacja serwera na hostingu? Jest to Windows i aplikacja IIS, czy Linux i serwer Apache lub NginX? W imieniu jakiego użytkownika pracuje serwer? Może da się choćby na próbę uruchomić serwer na użytkowniku z pełnymi uprawnieniami?

Czy pomiędzy serwerem hostującym a internetem jest jakikolwiek firewall? Może da się całkowicie go zlikwidować lub przynajmniej przepuścić cały ruch na portach 25, 587 i 465?

Nigdy nie miałem do czynienia z usługą hostingu ASP.NET, więc ja dalej nie pomogę, ale ktoś inny może pomoże lub warto dopytać się informatyków w firmie hostingowej.

0

Co do portów to próbuj 587 bez SSL lub 465 z SSL.

W przypadku System.Net.Mail jest taki problem, ze nie potrafi nawiązać połączenia SSL, tylko nawiązuje połączenie na porcie bez szyfrowania, a potem na nim spróbować włączyć SSL, dlatego działa poprawnie 587 z EnableSSL=true, ale nie wiadomo, czy serwer Gmail zgodził się na to i czy komunikacja jest faktycznie szyfrowana.

1

Firewall, hosta. Telnet z serwera do Google na typ porcie. Ping itp.

1 użytkowników online, w tym zalogowanych: 0, gości: 1