Wysyłanie wiadomości e-mail w .NET przez Gmaila

876

Zamiast polegać na tym, że mój host wysyła wiadomość e-mail, myślałem o wysyłaniu wiadomości e-mail za pomocą mojego konta Gmail . E-maile to spersonalizowane wiadomości e-mail do zespołów, w których gram w moim programie.

Czy można to zrobić?

Mike Wills
źródło
1
< systemnetmail.com > jest prawdopodobnie najbardziej absurdalnie kompletną witryną poświęconą pojedynczej przestrzeni nazw .NET ... ale ma WSZYSTKO, co możesz chcieć wiedzieć o wysyłaniu poczty za pośrednictwem platformy .NET, czy to ASP.NET czy Desktop. < systemwebmail.com > był oryginalnym adresem URL w poście, ale nie należy go używać w .NET 2.0 i nowszych wersjach .
Adam Haile,
13
Jeśli używasz ASP.Net Mvc, poleciłbym zajrzeć do MvcMailer: github.com/smsohan/MvcMailer/wiki/MvcMailer-Step-by-Step-Guide
noocyte
Mam ładny przykład tego, jak to zrobić na mojej stronie jarloo.com/gmail-in-c
Kelly
jak wysłać plik za pomocą tego kodu?
Ranadheer Reddy

Odpowiedzi:

1065

Pamiętaj, aby użyć System.Net.Mail, a nie przestarzałe System.Web.Mail. Robienie SSL z System.Web.Mailjest ogromnym bałaganem hacky rozszerzeń.

using System.Net;
using System.Net.Mail;

var fromAddress = new MailAddress("[email protected]", "From Name");
var toAddress = new MailAddress("[email protected]", "To Name");
const string fromPassword = "fromPassword";
const string subject = "Subject";
const string body = "Body";

var smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}
Domenic
źródło
49
Nadal możesz dostać się do niezalogowanych błędów, jeśli Google nagle zdecyduje, że wysłałeś zbyt wiele w ciągu ostatnich xx minut. Zawsze powinieneś dodać trySend, jeśli wystąpi błąd, a następnie spróbuj ponownie.
Jason Short,
72
Ciekawa uwaga: jeśli zamienisz „UseDefaultCredentials = false” i „Credentials = ...”, to nie zostanie uwierzytelnione.
Nathan Wheeler,
13
Nie ma problemów z SPF przy użyciu tej metody. Każdy klient poczty e-mail można skonfigurować tak, aby działał dokładnie tak. Mogą pojawić się problemy, jeśli użyjesz własnego serwera (tj. Czegoś innego niż smtp.gmail.com) [email protected]jako nadawcy. Btw: smtp.gmail.comautomatycznie zastępuje adres nadawcy, jeśli nie jest on twój.
Meinersbur
24
Trudno mi było pracować z tym, nawet próbując różnych poprawek. Jak zasugerowano w powiązanym poście, odkryłem, że to mój program antywirusowy uniemożliwiał pomyślne wysłanie wiadomości e-mail. Omawianym antywirusem jest McAffee, a jego „Ochrona dostępu” ma kategorię „Standardowa ochrona antywirusowa”, która ma zasadę „Zapobiegaj wysyłaniu wiadomości e-mail przez robaki masowo wysyłające”. Poprawienie / wyłączenie tej reguły sprawiło, że ten kod działa dla mnie!
yourbuddypal,
18
Otrzymywałem komunikat o błędzie Wymaganie uwierzytelnienia 5.5.1, dopóki nie zdałem sobie sprawy, że testuję konto (moje osobiste) z włączonym uwierzytelnianiem dwuskładnikowym. Kiedyś użyłem konta, które tego nie miało, działało dobrze. Mógłbym również wygenerować hasło do mojej aplikacji, z której testowałem w moim osobistym akcie, ale nie chciałem tego robić.
Nick DeVore,
153

Powyższa odpowiedź nie działa. Musisz ustawić DeliveryMethod = SmtpDeliveryMethod.Networklub wróci z błędem „ klient nie został uwierzytelniony ”. Poza tym zawsze dobrze jest ustawić limit czasu.

Zmieniony kod:

using System.Net.Mail;
using System.Net;

var fromAddress = new MailAddress("[email protected]", "From Name");
var toAddress = new MailAddress("[email protected]", "To Name");
const string fromPassword = "password";
const string subject = "test";
const string body = "Hey now!!";

var smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword),
    Timeout = 20000
};
using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}
Donny V.
źródło
3
Ciekawy; działa na mojej maszynie (TM). Ale ponieważ wydaje się to prawdopodobne, dodam to do mojej odpowiedzi.
Domenic,
3
Hmm, domyślam się, że SmtpDeliveryMethod.Network jest domyślny, ale może domyślny zmienia się podczas pracy w IIS --- czy to było to, co robiłeś?
Domenic,
3
Używam tego samego kodu w aplikacji konsoli, to przez błąd „Nie
Karthikeyan P
5
Ta odpowiedź nie działa. Proszę spojrzeć na pytanie stackoverflow.com/questions/34851484/…
110

Aby pozostałe odpowiedzi działały „z serwera” najpierw włącz dostęp dla mniej bezpiecznych aplikacji na koncie Gmail.

Wygląda na to, że ostatnio Google zmieniło swoją politykę bezpieczeństwa. Najwyżej oceniana odpowiedź nie działa, dopóki nie zmienisz ustawień konta zgodnie z opisem tutaj: https://support.google.com/accounts/answer/6010255?hl=plwprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Od marca 2016 r. Google ponownie zmieniło lokalizację ustawienia!

Oprogramowanie BCS
źródło
4
To zadziałało dla mnie. I dotyczy również. Nie jestem pewien, czy chcę wyłączyć to zabezpieczenie. Może trzeba przemyśleć ...
Sully,
4
Z punktu widzenia bezpieczeństwa lepiej włączyć weryfikację dwuetapową, a następnie wygenerować i użyć hasła do aplikacji - zobacz Jak wysłać wiadomość e-mail w .Net zgodnie z nowymi zasadami bezpieczeństwa?
Michael Freidgeim
2
@BCS Software, inmy program, użytkownik wstawia e-maile, których mój program musi użyć, aby wysłać wiadomość. Jak mogę sprawić, by użytkownik poczty e-mail mógł wysłać wiadomość e-mail, nawet jeśli włączone jest uwierzytelnianie dwuskładnikowe?
Alaa „
Jest to to samo ustawienie, które należy zmienić, jeśli chcesz używać klienta Microsoft Outlook (na komputerze stacjonarnym, telefonie komórkowym itp.) Do wysyłania / odbierania wiadomości e-mail za pośrednictwem Gmaila Google.
Brett Rigby
41

To jest, aby wysłać e-mail z załącznikiem. Prosty i krótki ..

źródło: http://coding-issues.blogspot.in/2012/11/sending-email-with-attachments-from-c.html

using System.Net;
using System.Net.Mail;

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

    System.Net.Mail.Attachment attachment;
    attachment = new System.Net.Mail.Attachment("c:/textfile.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);

}
Ranadheer Reddy
źródło
21

Google może blokować próby logowania z niektórych aplikacji lub urządzeń, które nie stosują nowoczesnych standardów bezpieczeństwa. Ponieważ te aplikacje i urządzenia są łatwiejsze do włamania, zablokowanie ich pomaga utrzymać bezpieczeństwo konta.

Niektóre przykłady aplikacji, które nie obsługują najnowszych standardów bezpieczeństwa, obejmują:

  • Aplikacja Mail na iPhonie lub iPadzie z systemem iOS 6 lub starszym
  • Aplikacja Poczta na telefonie z systemem Windows wcześniejszym niż wersja 8.1
  • Niektóre klienty poczty Desktop, takie jak Microsoft Outlook i Mozilla Thunderbird

Dlatego musisz włączyć mniej bezpieczne logowanie na swoim koncie Google.

Po zalogowaniu się na konto Google przejdź do:

https://myaccount.google.com/lesssecureapps
lub
https://www.google.com/settings/security/lesssecureapps

W języku C # możesz użyć następującego kodu:

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("[email protected]");
    mail.To.Add("[email protected]");
    mail.Subject = "Hello World";
    mail.Body = "<h1>Hello</h1>";
    mail.IsBodyHtml = true;
    mail.Attachments.Add(new Attachment("C:\\file.zip"));

    using (SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587))
    {
        smtp.Credentials = new NetworkCredential("[email protected]", "password");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    }
}
mjb
źródło
17

Aby go uruchomić, musiałem włączyć konto Gmail, aby inne aplikacje mogły uzyskać dostęp. Odbywa się to za pomocą „włączania mniej bezpiecznych aplikacji”, a także za pomocą tego linku: https://accounts.google.com/b/0/DisplayUnlockCaptcha

Mark Homans
źródło
16

Oto moja wersja: „ Wyślij e-mail w C # za pomocą Gmaila ”.

using System;
using System.Net;
using System.Net.Mail;

namespace SendMailViaGmail
{
   class Program
   {
   static void Main(string[] args)
   {

      //Specify senders gmail address
      string SendersAddress = "[email protected]";
      //Specify The Address You want to sent Email To(can be any valid email address)
      string ReceiversAddress = "[email protected]";
      //Specify The password of gmial account u are using to sent mail(pw of [email protected])
      const string SendersPassword = "Password";
      //Write the subject of ur mail
      const string subject = "Testing";
      //Write the contents of your mail
      const string body = "Hi This Is my Mail From Gmail";

      try
      {
        //we will use Smtp client which allows us to send email using SMTP Protocol
        //i have specified the properties of SmtpClient smtp within{}
        //gmails smtp server name is smtp.gmail.com and port number is 587
        SmtpClient smtp = new SmtpClient
        {
           Host = "smtp.gmail.com",
           Port = 587,
           EnableSsl = true,
           DeliveryMethod = SmtpDeliveryMethod.Network,
           Credentials    = new NetworkCredential(SendersAddress, SendersPassword),
           Timeout = 3000
        };

        //MailMessage represents a mail message
        //it is 4 parameters(From,TO,subject,body)

        MailMessage message = new MailMessage(SendersAddress, ReceiversAddress, subject, body);
        /*WE use smtp sever we specified above to send the message(MailMessage message)*/

        smtp.Send(message);
        Console.WriteLine("Message Sent Successfully");
        Console.ReadKey();
     }

     catch (Exception ex)
     {
        Console.WriteLine(ex.Message);
        Console.ReadKey();
     }
    }
   }
 }
tehie
źródło
8
Chociaż Twój artykuł może w rzeczywistości odpowiedzieć na pytanie, lepiej byłoby zawrzeć w nim istotne części odpowiedzi i podać odnośnik. Przepełnienie stosu jest tak samo przydatne, jak jego pytania i odpowiedzi, a jeśli Twój blog prowadzi do awarii lub zmienia się adresy URL, ta odpowiedź staje się bezużyteczna. Dzięki!
sarnold
14

Mam nadzieję, że ten kod będzie działał dobrze. Możesz spróbować.

// Include this.                
using System.Net.Mail;

string fromAddress = "[email protected]";
string mailPassword = "*****";       // Mail id password from where mail will be sent.
string messageBody = "Write the body of the message here.";


// Create smtp connection.
SmtpClient client = new SmtpClient();
client.Port = 587;//outgoing port for the mail.
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
client.Timeout = 10000;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential(fromAddress, mailPassword);


// Fill the mail form.
var send_mail = new MailMessage();

send_mail.IsBodyHtml = true;
//address from where mail will be sent.
send_mail.From = new MailAddress("[email protected]");
//address to which mail will be sent.           
send_mail.To.Add(new MailAddress("[email protected]");
//subject of the mail.
send_mail.Subject = "put any subject here";

send_mail.Body = messageBody;
client.Send(send_mail);
Premdeep Mohanty
źródło
2
wiadomość send_mail = new MailMessage (); Jak ta linia ma działać? Nie można pośrednio przekonwertować „System.Net.Mail.MailMessage” na „System.Windows.Forms.Message”
Debaprasad
9

Uwzględnij to,

using System.Net.Mail;

I wtedy,

MailMessage sendmsg = new MailMessage(SendersAddress, ReceiversAddress, subject, body); 
SmtpClient client = new SmtpClient("smtp.gmail.com");

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

client.Send(sendmsg);
GOPI
źródło
8

Źródło : Wyślij e-mail w ASP.NET C #

Poniżej znajduje się przykładowy działający kod do wysyłania poczty za pomocą C #, w poniższym przykładzie korzystam z serwera smtp Google.

Kod jest dość oczywisty, zastąp adres e-mail i hasło wartościami adresu e-mail i hasła.

public void SendEmail(string address, string subject, string message)
{
    string email = "[email protected]";
    string password = "put-your-GMAIL-password-here";

    var loginInfo = new NetworkCredential(email, password);
    var msg = new MailMessage();
    var smtpClient = new SmtpClient("smtp.gmail.com", 587);

    msg.From = new MailAddress(email);
    msg.To.Add(new MailAddress(address));
    msg.Subject = subject;
    msg.Body = message;
    msg.IsBodyHtml = true;

    smtpClient.EnableSsl = true;
    smtpClient.UseDefaultCredentials = false;
    smtpClient.Credentials = loginInfo;
    smtpClient.Send(msg);
}
Yasser Shaikh
źródło
Zamiast var użyłem nazw klas takich jak NetworkCredential, MailMessage i SmtpClient. To działa dla mnie.
Test Jui
7

Jeśli chcesz wysłać e-mail w tle, wykonaj następujące czynności

 public void SendEmail(string address, string subject, string message)
 {
 Thread threadSendMails;
 threadSendMails = new Thread(delegate()
    {

      //Place your Code here 

     });
  threadSendMails.IsBackground = true;
  threadSendMails.Start();
}

i dodaj przestrzeń nazw

using System.Threading;
RAJESH KUMAR
źródło
5

Spróbuj tego,

    private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");

            mail.From = new MailAddress("[email protected]");
            mail.To.Add("to_address");
            mail.Subject = "Test Mail";
            mail.Body = "This is for testing SMTP mail from GMAIL";

            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential("username", "password");
            SmtpServer.EnableSsl = true;

            SmtpServer.Send(mail);
            MessageBox.Show("mail Send");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }
Oprogramowanie Trimantra
źródło
4

użyj tego sposobu

MailMessage sendmsg = new MailMessage(SendersAddress, ReceiversAddress, subject, body); 
SmtpClient client = new SmtpClient("smtp.gmail.com");

client.Port = Convert.ToInt32("587");
client.EnableSsl = true;
client.Credentials = new System.Net.NetworkCredential("[email protected]","MyPassWord");
client.Send(sendmsg);

Nie zapomnij tego:

using System.Net;
using System.Net.Mail;
Alireza Amini
źródło
4

Aby uniknąć problemów związanych z bezpieczeństwem w Gmailu, należy najpierw wygenerować hasło do aplikacji w ustawieniach Gmaila i możesz użyć tego hasła zamiast prawdziwego hasła, aby wysłać wiadomość e-mail, nawet jeśli korzystasz z weryfikacji dwuetapowej.

Powiedział Uz Zaman
źródło
3

Zmiana nadawcy w e-mailu Gmail / Outlook.com:

Aby zapobiec fałszowaniu - Gmail / Outlook.com nie pozwala na wysyłanie z nazwy dowolnego konta użytkownika.

Jeśli masz ograniczoną liczbę nadawców, możesz postępować zgodnie z tymi instrukcjami, a następnie ustawić Frompole na ten adres: Wysyłanie poczty z innego adresu

Jeśli chcesz wysłać z dowolnego adresu e-mail (takiego jak formularz zwrotny na stronie internetowej, na której użytkownik wprowadza swój adres e-mail, a nie chcesz, aby wysyłał Ci bezpośrednio e-mailem), możesz:

        msg.ReplyToList.Add(new System.Net.Mail.MailAddress(email, friendlyName));

Pozwoliłoby to po prostu nacisnąć „odpowiedz” na swoim koncie e-mail, aby odpowiedzieć fanowi zespołu na stronie z opiniami, ale nie otrzymaliby twojego prawdziwego e-maila, co prawdopodobnie doprowadziłoby do tony spamu.

Jeśli jesteś w kontrolowanym środowisku, działa to świetnie, ale pamiętaj, że widziałem niektórych klientów e-mail wysyłających na adres od, nawet gdy określono odpowiedź na (nie wiem, który).

Simon_Weaver
źródło
3

Miałem ten sam problem, ale problem został rozwiązany, przechodząc do ustawień zabezpieczeń Gmaila i zezwalając na mniej bezpieczne aplikacje . Kod Domenic & Donny działa, ale tylko jeśli włączysz to ustawienie

Jeśli jesteś zalogowany (w Google), możesz skorzystać z tego linku i przełączyć „Włącz” na „Dostęp dla mniej bezpiecznych aplikacji”

DarkPh03n1X
źródło
3
using System;
using System.Net;
using System.Net.Mail;

namespace SendMailViaGmail
{
   class Program
   {
   static void Main(string[] args)
   {

      //Specify senders gmail address
      string SendersAddress = "[email protected]";
      //Specify The Address You want to sent Email To(can be any valid email address)
      string ReceiversAddress = "[email protected]";
      //Specify The password of gmial account u are using to sent mail(pw of [email protected])
      const string SendersPassword = "Password";
      //Write the subject of ur mail
      const string subject = "Testing";
      //Write the contents of your mail
      const string body = "Hi This Is my Mail From Gmail";

      try
      {
        //we will use Smtp client which allows us to send email using SMTP Protocol
        //i have specified the properties of SmtpClient smtp within{}
        //gmails smtp server name is smtp.gmail.com and port number is 587
        SmtpClient smtp = new SmtpClient
        {
           Host = "smtp.gmail.com",
           Port = 587,
           EnableSsl = true,
           DeliveryMethod = SmtpDeliveryMethod.Network,
           Credentials = new NetworkCredential(SendersAddress, SendersPassword),
           Timeout = 3000
        };

        //MailMessage represents a mail message
        //it is 4 parameters(From,TO,subject,body)

        MailMessage message = new MailMessage(SendersAddress, ReceiversAddress, subject, body);
        /*WE use smtp sever we specified above to send the message(MailMessage message)*/

        smtp.Send(message);
        Console.WriteLine("Message Sent Successfully");
        Console.ReadKey();
     }
     catch (Exception ex)
     {
        Console.WriteLine(ex.Message);
        Console.ReadKey();
     }
}
}
}
Moin Shirazi
źródło
2

Oto jedna metoda wysyłania poczty i uzyskiwania poświadczeń z pliku web.config:

public static string SendEmail(string To, string Subject, string Msg, bool bodyHtml = false, bool test = false, Stream AttachmentStream = null, string AttachmentType = null, string AttachmentFileName = null)
{
    try
    {
        System.Net.Mail.MailMessage newMsg = new System.Net.Mail.MailMessage(System.Configuration.ConfigurationManager.AppSettings["mailCfg"], To, Subject, Msg);
        newMsg.BodyEncoding = System.Text.Encoding.UTF8;
        newMsg.HeadersEncoding = System.Text.Encoding.UTF8;
        newMsg.SubjectEncoding = System.Text.Encoding.UTF8;

        System.Net.Mail.SmtpClient smtpClient = new System.Net.Mail.SmtpClient();
        if (AttachmentStream != null && AttachmentType != null && AttachmentFileName != null)
        {
            System.Net.Mail.Attachment attachment = new System.Net.Mail.Attachment(AttachmentStream, AttachmentFileName);
            System.Net.Mime.ContentDisposition disposition = attachment.ContentDisposition;
            disposition.FileName = AttachmentFileName;
            disposition.DispositionType = System.Net.Mime.DispositionTypeNames.Attachment;

            newMsg.Attachments.Add(attachment);
        }
        if (test)
        {
            smtpClient.PickupDirectoryLocation = "C:\\TestEmail";
            smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.SpecifiedPickupDirectory;
        }
        else
        {
            //smtpClient.EnableSsl = true;
        }

        newMsg.IsBodyHtml = bodyHtml;
        smtpClient.Send(newMsg);
        return SENT_OK;
    }
    catch (Exception ex)
    {

        return "Error: " + ex.Message
             + "<br/><br/>Inner Exception: "
             + ex.InnerException;
    }

}

I odpowiednia sekcja w pliku web.config:

<appSettings>
    <add key="mailCfg" value="[email protected]"/>
</appSettings>
<system.net>
  <mailSettings>
    <smtp deliveryMethod="Network" from="[email protected]">
      <network defaultCredentials="false" host="mail.exapmple.com" userName="[email protected]" password="your_password" port="25"/>
    </smtp>
  </mailSettings>
</system.net>
iTURTEV
źródło
2

Spróbuj tego

public static bool Send(string receiverEmail, string ReceiverName, string subject, string body)
{
        MailMessage mailMessage = new MailMessage();
        MailAddress mailAddress = new MailAddress("[email protected]", "Sender Name"); // [email protected] = input Sender Email Address 
        mailMessage.From = mailAddress;
        mailAddress = new MailAddress(receiverEmail, ReceiverName);
        mailMessage.To.Add(mailAddress);
        mailMessage.Subject = subject;
        mailMessage.Body = body;
        mailMessage.IsBodyHtml = true;

        SmtpClient mailSender = new SmtpClient("smtp.gmail.com", 587)
        {
            EnableSsl = true,
            UseDefaultCredentials = false,
            DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
            Credentials = new NetworkCredential("[email protected]", "pass")   // [email protected] = input sender email address  
                                                                           //pass = sender email password
        };

        try
        {
            mailSender.Send(mailMessage);
            return true;
        }
        catch (SmtpFailedRecipientException ex)
        { 
          // Write the exception to a Log file.
        }
        catch (SmtpException ex)
        { 
           // Write the exception to a Log file.
        }
        finally
        {
            mailSender = null;
            mailMessage.Dispose();
        }
        return false;
}
reza.cse08
źródło
1

Problemem było to, że moje hasło zawierało ukośnik „\” , który skopiowałem wklejając, nie wiedząc, że spowoduje to problemy.

Satbir Kira
źródło
1

Kopiowanie z innej odpowiedzi , powyższe metody działają, ale Gmail zawsze zastępuje wiadomości e-mail „od” i „odpowiedz na” z faktycznym kontem wysyłającym Gmail. najwyraźniej istnieje jednak obejście:

http://karmic-development.blogspot.in/2013/10/send-email-from-aspnet-using-gmail-as.html

„3. Na karcie Konta kliknij link„ Dodaj kolejny adres e-mail, którego jesteś właścicielem ”, a następnie zweryfikuj go”

A może to

Aktualizacja 3: Czytelnik Derek Bennett mówi: „Rozwiązaniem jest przejście do ustawień Gmaila: Konta i„ Ustaw jako domyślne ”konto inne niż konto Gmail. Spowoduje to, że Gmail ponownie przepisze pole Od niezależnie od adresu e-mail konta domyślnego adres to."

rogerdpack
źródło
1

Można spróbować Mailkit. Zapewnia lepszą i zaawansowaną funkcjonalność wysyłania poczty. Możesz znaleźć więcej z tego Oto przykład

    MimeMessage message = new MimeMessage();
    message.From.Add(new MailboxAddress("FromName", "[email protected]"));
    message.To.Add(new MailboxAddress("ToName", "[email protected]"));
    message.Subject = "MyEmailSubject";

    message.Body = new TextPart("plain")
    {
        Text = @"MyEmailBodyOnlyTextPart"
    };

    using (var client = new SmtpClient())
    {
        client.Connect("SERVER", 25); // 25 is port you can change accordingly

        // Note: since we don't have an OAuth2 token, disable
        // the XOAUTH2 authentication mechanism.
        client.AuthenticationMechanisms.Remove("XOAUTH2");

        // Note: only needed if the SMTP server requires authentication
        client.Authenticate("YOUR_USER_NAME", "YOUR_PASSWORD");

        client.Send(message);
        client.Disconnect(true);
    }
Naveen
źródło