SmtpClient是否也可以直接向接收方发送电子邮件?

时间:2014-08-24 17:29:43

标签: c# smtp asp.net-mvc-5 smtpclient

SmptClient可用于通过中继服务器发送电子邮件。但是SmtpClient是否也能够直接向接收方发送电子邮件而不是通过中继服务器

修改

有哪些想法SmtpCLient需要如何配置才能将电子邮件直接发送到接收器

我尝试使用以下代码,但我得到了" SMTP服务器需要安全连接或客户端未经过身份验证。服务器响应为:5.5.1需要身份验证。"

public class EmailService : IIdentityMessageService
{
    public Task SendAsync(IdentityMessage message)
    {
     // var credentialUserName = "myAccount@gmail.com";
        var sentFrom = "myAccount@gmail.com";
     // var pwd = "myPwd";

        System.Net.Mail.SmtpClient client = 
            new System.Net.Mail.SmtpClient("smtp.gmail.com");

        client.Port = 587;
        client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
        client.UseDefaultCredentials = false;

     /* System.Net.NetworkCredential credentials = 
            new System.Net.NetworkCredential(credentialUserName, pwd);
     */
        client.EnableSsl = true;
     // client.Credentials = credentials;

        var mail = 
            new System.Net.Mail.MailMessage(sentFrom, message.Destination);

        mail.Subject = message.Subject;
        mail.Body = message.Body;

        return client.SendMailAsync(mail);
    }
}

第二次编辑:

Thanx,它现在有效。应用已直接(而不是通过myAccount@gmail.com)向otherAccount@gmail.com发送电子邮件。这是代码:

public class EmailService : IIdentityMessageService
{
    public Task SendAsync(IdentityMessage message)
    {
        var sentFrom = "myAccount@gmail.com";

        System.Net.Mail.SmtpClient client = 
            new System.Net.Mail.SmtpClient("gmail-smtp-in.l.google.com");

        client.Port = 25;
        client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
        client.UseDefaultCredentials = false;

        client.EnableSsl = true;


        var mail = 
            new System.Net.Mail.MailMessage(sentFrom, message.Destination);

        mail.Subject = message.Subject;
        mail.Body = message.Body;

        return client.SendMailAsync(mail);
    }
}

谢谢

1 个答案:

答案 0 :(得分:2)

简短回答:是的!

中继服务器只是一台服务器,配置为接受所有电子邮件并将其传递到正确的目的地。您也可以直接联系正确的目标服务器并在那里发送电子邮件。

当然,这是因为没有防火墙问题阻止您直接联系目标服务器。

修改

服务器smtp.gmail.com用于gmail用户发送(外发)电子邮件,即您必须使用您的Gmail用户名和密码进行身份验证才能允许以这种方式发送电子邮件,但如果您这样做,则可以发送给任何收件人,也就是非gmail地址。

我理解您的原始问题意味着您希望在不使用代理的情况下向(在本例中)发送电子邮件地址。在这种情况下,您的客户端应该像尝试发送到gmail-address的任意电子邮件服务器一样,即它应该连接到MX-records所给出的域的官方传入SMTP服务器之一在DNS中。例如。其中一个gmail的MX记录指向gmail-smtp-in.l.google.com,如果你连接到该服务器的端口25,你可以向gmail-address提交一封电子邮件(你也可以完全欺骗发送地址,但是垃圾邮件过滤可能会导致您的电子邮件无法发送。

我对防火墙问题的警告解释如下:大多数ISP不允许将端口25的传出TCP连接发送到除自己的服务器之外的其他主机。这只是因为上面提到的欺骗可能性,即如果您的ISP允许您与其他电子邮件服务器的端口25进行TCP连接,您可以使用它来发送垃圾邮件。因此,您的ISP可能不允许您这样做,而是应该通过您的ISP转发您的电子邮件,以便他们可以采取适当的措施,如果您尝试向人们发送垃圾邮件。