【问题标题】:Sending email in .NET through Gmail通过 Gmail 在 .NET 中发送电子邮件
【发布时间】:2010-09-07 03:08:54
【问题描述】:

我没有依赖主机发送电子邮件,而是考虑使用我的 Gmail 帐户发送电子邮件。这些电子邮件是发给我在节目中演奏的乐队的个性化电子邮件。

有可能吗?

【问题讨论】:

标签: c# .net email smtp gmail


【解决方案1】:

请务必使用System.Net.Mail,而不是已弃用的System.Web.Mail。用System.Web.Mail 做 SSL 是一堆乱七八糟的扩展。

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

var fromAddress = new MailAddress("from@gmail.com", "From Name");
var toAddress = new MailAddress("to@example.com", "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);
}

另外转到Google Account > Security 页面并查看登录 Google > 两步验证设置。

  • 如果已启用,则您必须生成一个密码以允许 .NET 绕过两步验证。为此,点击Signing in to Google > App passwords,选择app = Mail,设备= Windows Computer,最后生成密码。在 fromPassword 常量中使用生成的密码,而不是您的标准 Gmail 密码。
  • 如果禁用,则必须开启Less secure app access,不推荐!所以最好启用两步验证。

【讨论】:

  • 如果 Google 突然决定您在过去 xx 分钟内发送了太多信息,您仍然可以让用户未登录错误。你应该总是添加一个 trySend,如果它错误睡眠一段时间,然后再试一次。
  • 有趣的注释:如果你交换 'UseDefaultCredentials = false,' 和 'Credentials = ...' 它不会验证。
  • 使用这种方法的SPF没有问题。每个电子邮件客户端都可以配置为完全执行此操作。如果您使用自己的服务器(即smtp.gmail.com 以外的其他服务器)并将something@gmail.com 作为发件人,您可能会遇到问题。顺便说一句:smtp.gmail.com 会自动覆盖不是您的发件人地址。
  • 即使尝试了各种调整,我也很难让它正常工作。正如相关帖子所建议的那样,我发现实际上是我的防病毒软件阻止了电子邮件的成功发送。有问题的防病毒软件是 McAffee,它的“访问保护”有一个“防病毒标准保护”类别,其中有一个“防止大量邮件蠕虫发送电子邮件”规则。调整/禁用该规则让这段代码为我工作!
  • 我收到 5.5.1 Authentication Required 错误消息,直到我意识到我正在使用一个启用了双因素身份验证的帐户(我的个人帐户)进行测试。一旦我使用了一个没有该帐户的帐户,它就可以正常工作。我也可以在我的个人帐户中为我正在测试的应用程序生成一个密码,但我不想这样做。
【解决方案2】:

上面的答案不起作用。你必须设置DeliveryMethod = SmtpDeliveryMethod.Network 否则它会返回一个“client was not authenticated”错误。此外,设置超时总是一个好主意。

修改后的代码:

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

var fromAddress = new MailAddress("from@gmail.com", "From Name");
var toAddress = new MailAddress("to@yahoo.com", "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);
}

【讨论】:

  • 有趣;它适用于我的机器(TM)。但由于这似乎是合理的,我将其添加到我的答案中。
  • 嗯,我的猜测是 SmtpDeliveryMethod.Network 是默认值,但在 IIS 中运行时,可能会更改默认值 --- 你在做什么?
  • 我在控制台应用程序中使用相同的代码,它是通过错误 “发送邮件失败。”
  • 这个答案不起作用。请看问题stackoverflow.com/questions/34851484/…
【解决方案3】:

这是我的版本:“Send Email In C # Using Gmail”。

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

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

      //Specify senders gmail address
      string SendersAddress = "Sendersaddress@gmail.com";
      //Specify The Address You want to sent Email To(can be any valid email address)
      string ReceiversAddress = "ReceiversAddress@yahoo.com";
      //Specify The password of gmial account u are using to sent mail(pw of sender@gmail.com)
      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();
     }
    }
   }
 }

【讨论】:

  • 虽然您的文章实际上可能回答了这个问题,但it would be preferable 在这里包含了答案的基本部分,并提供了链接以供参考。 Stack Overflow 仅与它的问题和答案一样有用,如果您的博客主机出现故障或您的 URL 被移动,这个答案将变得毫无用处。谢谢!
【解决方案4】:

这是发送带有附件的电子邮件..简单而简短..

来源: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 mail@gmail.com");
    mail.To.Add("to_mail@gmail.com");
    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 mail@gmail.com", "your password");
    SmtpServer.EnableSsl = true;

    SmtpServer.Send(mail);

}

【讨论】:

    【解决方案5】:

    来源Send email in ASP.NET C#

    下面是使用 C# 发送邮件的示例工作代码,在下面的示例中,我使用的是 google 的 smtp 服务器。

    代码很容易解释,用您的电子邮件和密码值替换电子邮件和密码。

    public void SendEmail(string address, string subject, string message)
    {
        string email = "yrshaikh.mail@gmail.com";
        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);
    }
    

    【讨论】:

    • 我使用了 NetworkCredential、MailMessage 和 SmtpClient 等类名,而不是 var。它对我有用。
    • 这对我有用。除了上面提到的所有有效的优点以及上面提到的 gmail 安全性的东西。它起作用的原因是需要先关闭对象的默认凭据,这些默认凭据可能为空或留空,然后才能设置其 SmtpClient 凭据,而不是之后。谢谢 Yasser Shaikh。
    【解决方案6】:

    在 Gmail / Outlook.com 电子邮件上更改发件人:

    为了防止欺骗 - Gmail/Outlook.com 不会让您从任意用户帐户名发送。

    如果您的发件人数量有限,您可以按照这些说明操作,然后将From 字段设置为以下地址:Sending mail from a different address

    如果您想从任意电子邮件地址发送(例如用户输入电子邮件的网站上的反馈表,并且您不希望他们直接向您发送电子邮件),那么您可以做的最好的事情是:

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

    这将使您只需在您的电子邮件帐户中点击“回复”即可在反馈页面上回复您乐队的粉丝,但他们不会收到您的实际电子邮件,这可能会导致大量垃圾邮件。

    如果您处于受控环境中,这非常有用,但请注意,即使指定了回复(我不知道是哪个),我也看到一些电子邮件客户端发送到发件人地址。

    【讨论】:

      【解决方案7】:

      如果您想发送后台电子邮件,请执行以下操作

       public void SendEmail(string address, string subject, string message)
       {
       Thread threadSendMails;
       threadSendMails = new Thread(delegate()
          {
      
            //Place your Code here 
      
           });
        threadSendMails.IsBackground = true;
        threadSendMails.Start();
      }
      

      并添加命名空间

      using System.Threading;
      

      【讨论】:

        【解决方案8】:

        这是发送邮件和从 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;
            }
        
        }
        

        以及web.config中的对应部分:

        <appSettings>
            <add key="mailCfg" value="yourmail@example.com"/>
        </appSettings>
        <system.net>
          <mailSettings>
            <smtp deliveryMethod="Network" from="yourmail@example.com">
              <network defaultCredentials="false" host="mail.exapmple.com" userName="yourmail@example.com" password="your_password" port="25"/>
            </smtp>
          </mailSettings>
        </system.net>
        

        【讨论】:

          【解决方案9】:

          包括这个,

          using System.Net.Mail;
          

          然后,

          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("mail-id@gmail.com","password");
          client.EnableSsl = true;
          
          client.Send(sendmsg);
          

          【讨论】:

            【解决方案10】:

            我希望这段代码能正常工作。你可以试一试。

            // Include this.                
            using System.Net.Mail;
            
            string fromAddress = "xyz@gmail.com";
            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("from@gmail.com");
            //address to which mail will be sent.           
            send_mail.To.Add(new MailAddress("to@example.com");
            //subject of the mail.
            send_mail.Subject = "put any subject here";
            
            send_mail.Body = messageBody;
            client.Send(send_mail);
            

            【讨论】:

            • message send_mail = new MailMessage();这条线应该如何工作?您不能将“System.Net.Mail.MailMessage”隐式转换为“System.Windows.Forms.Message”
            【解决方案11】:

            为了让它正常工作,我必须启用我的 gmail 帐户才能让其他应用程序获得访问权限。这是通过“启用不太安全的应用程序”和使用此链接完成的: https://accounts.google.com/b/0/DisplayUnlockCaptcha

            【讨论】:

            • 这个答案需要置顶。
            【解决方案12】:

            Google 可能会阻止来自不使用现代安全标准的某些应用或设备的登录尝试。由于这些应用和设备更容易被入侵,因此阻止它们有助于确保您的帐户更安全。

            一些不支持最新安全标准的应用示例包括:

            • 安装 iOS 6 或更低版本的 iPhone 或 iPad 上的邮件应用程序
            • Windows 手机上 8.1 版本之前的邮件应用程序
            • 某些桌面邮件客户端,例如 Microsoft Outlook 和 Mozilla Thunderbird

            因此,您必须在您的 Google 帐户中启用不太安全的登录

            登录谷歌账号后,前往:

            https://myaccount.google.com/lesssecureapps

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

            在 C# 中,您可以使用以下代码:

            using (MailMessage mail = new MailMessage())
            {
                mail.From = new MailAddress("email@gmail.com");
                mail.To.Add("somebody@domain.com");
                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@gmail.com", "password");
                    smtp.EnableSsl = true;
                    smtp.Send(mail);
                }
            }
            

            【讨论】:

              【解决方案13】:

              我遇到了同样的问题,但通过转到 gmail 的安全设置和允许不太安全的应用程序解决了这个问题。 Domenic & Donny 的代码有效,但前提是您启用了该设置

              如果您已登录(Google),您可以点击this 链接并切换“开启” 以获得“访问不太安全的应用”

              【讨论】:

                【解决方案14】:

                这样用

                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("mail-id@gmail.com","MyPassWord");
                client.Send(sendmsg);
                

                不要忘记这一点:

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

                【讨论】:

                  【解决方案15】:

                  对于“从服务器”工作的其他答案,请首先在 gmail 帐户中为不太安全的应用打开访问权限

                  看起来最近谷歌改变了它的安全政策。评分最高的答案不再有效,除非您按照此处所述更改您的帐户设置:https://support.google.com/accounts/answer/6010255?hl=en-GB

                  自 2016 年 3 月起,google 再次更改了设置位置!

                  【讨论】:

                  • 这对我有用。并且也令人担忧。不确定我是否要关闭该安全性。可能需要重新考虑...
                  • 从安全角度来看,最好开启两步验证,然后生成和使用应用密码-见How to send an email in .Net according to new security policies?
                  • @BCS Software,在我的程序中,用户插入我的程序必须使用它来发送消息的任何电子邮件。那么,即使打开了 2 因素身份验证,我如何才能让电子邮件用户能够发送电子邮件??
                  • 如果您想使用 Microsoft Outlook 客户端(在台式机、手机等上)通过 Google 的 GMail 发送/接收电子邮件,则需要更改此设置。
                  • 这对我有用。但请确保尽快将其放回原处:)
                  【解决方案16】:
                  using System;
                  using System.Net;
                  using System.Net.Mail;
                  
                  namespace SendMailViaGmail
                  {
                     class Program
                     {
                     static void Main(string[] args)
                     {
                  
                        //Specify senders gmail address
                        string SendersAddress = "Sendersaddress@gmail.com";
                        //Specify The Address You want to sent Email To(can be any valid email address)
                        string ReceiversAddress = "ReceiversAddress@yahoo.com";
                        //Specify The password of gmial account u are using to sent mail(pw of sender@gmail.com)
                        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();
                       }
                  }
                  }
                  }
                  

                  【讨论】:

                    【解决方案17】:

                    试试这个

                    public static bool Send(string receiverEmail, string ReceiverName, string subject, string body)
                    {
                            MailMessage mailMessage = new MailMessage();
                            MailAddress mailAddress = new MailAddress("abc@gmail.com", "Sender Name"); // abc@gmail.com = 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("abc@gmail.com", "pass")   // abc@gmail.com = 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;
                    }
                    

                    【讨论】:

                      【解决方案18】:

                      试试这个,

                          private void button1_Click(object sender, EventArgs e)
                          {
                              try
                              {
                                  MailMessage mail = new MailMessage();
                                  SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
                      
                                  mail.From = new MailAddress("your_email_address@gmail.com");
                                  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());
                              }
                          }
                      

                      【讨论】:

                        【解决方案19】:

                        another answer 复制,上述方法有效,但 gmail 始终将“发件人”和“回复”电子邮件替换为实际发送的 gmail 帐户。但是显然有一个解决方法:

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

                        “3. 在“帐户”选项卡中,单击链接“添加您拥有的另一个电子邮件地址”,然后进行验证”

                        或者可能是this

                        更新 3:读者 Derek Bennett 说:“解决方案是进入您的 gmail 设置:帐户并“设为默认”一个帐户,而不是您的 gmail 帐户。这将导致 gmail 使用任何默认帐户的电子邮件地址是。”

                        【讨论】:

                          【解决方案20】:

                          你可以试试Mailkit。它为您提供了更好、更先进的发送邮件功能。您可以从this 找到更多信息,这是一个示例

                              MimeMessage message = new MimeMessage();
                              message.From.Add(new MailboxAddress("FromName", "YOU_FROM_ADDRESS@gmail.com"));
                              message.To.Add(new MailboxAddress("ToName", "YOU_TO_ADDRESS@gmail.com"));
                              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);
                              }
                          

                          【讨论】:

                            【解决方案21】:

                            为避免 Gmail 中的安全问题,您应首先从 Gmail 设置中生成应用密码,即使您使用两步验证,您也可以使用此密码而不是真实密码发送电子邮件。

                            【讨论】:

                            • 是的,我同意 gmail 您需要进行设置。但是,我不太希望拥有第二个安全性较低的密码来完全访问我的帐户。如果您以某种方式可以集成“使用谷歌登录”并将令牌存储在应用程序上,这可能是一个更好的解决方案。但是我还没有对此进行测试。
                            【解决方案22】:

                            如果您的 Google 密码无效,您可能需要为 Google 上的 Gmail 创建一个应用专用密码。 https://support.google.com/accounts/answer/185833?hl=en

                            【讨论】:

                            • 这是一条评论。
                            猜你喜欢
                            • 2012-07-14
                            • 2011-02-08
                            • 2012-01-07
                            相关资源
                            最近更新 更多