标签: smtpclient

C#SMTP无法在Outlook.com,端口587上进行身份验证."服务器响应为:5.7.1客户端未经过身份验证"

我正在尝试发送自动电子邮件(真正需要的商业原因 - 不是垃圾邮件!).类似于下面的代码用于与另一个邮件服务提供商合作,但客户已经转移到"outlook.com",他们现在得到:

    The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.1 Client was not authenticated
Run Code Online (Sandbox Code Playgroud)

当然这个(C#)代码应该工作:

    private void Send_Click(object sender, EventArgs e)
    {
        MailMessage message = null;
        try
        {
            message = new MailMessage(From, To);
            message.Subject = "Update Request Session from " + From;
            message.CC.Add(Cc);
            message.Body = "Test message: please ignore.";
            message.IsBodyHtml = false;

            SmtpClient client = new SmtpClient("smtp.outlook.com", 587);
            client.Credentials = new System.Net.NetworkCredential(From, Password);
            client.UseDefaultCredentials = false;
            client.DeliveryMethod = SmtpDeliveryMethod.Network; …
Run Code Online (Sandbox Code Playgroud)

c# ssl smtp smtpclient outlook.com

21
推荐指数
2
解决办法
3万
查看次数

无法通过MailMessage和smtpClient身份验证到Gmail smtp

我无法弄清楚为什么这不起作用的生活

SmtpClient smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    UseDefaultCredentials = false,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere"),
    EnableSsl = true,
    Timeout = 10000
};


smtp.Send(mail);
Run Code Online (Sandbox Code Playgroud)

我明白了:

SMTP服务器需要安全连接或客户端未经过身份验证.服务器响应为:5.5.1需要身份验证.

我刚刚将EnableSsl指定为true,因此在安全连接方面不应该是问题.

我是从localhost运行的.是的,我输入auth(我的gmail帐户凭据)的用户名和密码是100%正确的.

c# gmail smtpclient

19
推荐指数
4
解决办法
3万
查看次数

.NET发送电子邮件的最佳方法(System.Net.Mail有问题)

这看起来非常简单.我需要从一些ASP.NET应用程序发送电子邮件.我需要始终如一地做到这一点,没有奇怪的错误,并且没有CPU利用率.我不是在谈论大量的电子邮件,只是偶尔的电子邮件.

System.Net.Mail 似乎被严重破坏.SmtpClient不会发出Quit命令(可能是因为Microsoft(R)对以下规范不感兴趣),因此连接保持打开状态.因此,如果有人在该连接最终关闭之前尝试通过电子邮件发送,则可能会从SMTP服务器收到有关打开过多连接的错误.这是Microsoft(R)完全不感兴趣修复的错误.看这里:

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=146711

此外,如果你环顾一些建议使用此代码来解决此问题:

smtpClient.ServicePoint.MaxIdleTime = 1;
smtpClient.ServicePoint.ConnectionLimit = 1;
Run Code Online (Sandbox Code Playgroud)

好的,是的,这确实"解决"了连接被打开的问题.但是,如果您愿意,可以在服务器上进行尝试,这会使运行进程(在本例中为w3wp.exe)的CPU跳转并保持100%,直到您的应用程序池被回收.无论出于何种原因,运行mscorwks.dll!CreateApplicationContext的线程都是罪魁祸首.

这具有非常好的副作用,如果您在持续100%CPU使用率的Web主机上运行,​​您将禁用应用程序池.所以这并不像有些人所说的那样微不足道.

所以我的问题是该怎么办?我需要做的就是这么简单; 但是,那些"太多连接打开"错误是不可接受的,也不是100%的CPU使用率.我不想购买第三方组件,不是因为我便宜,而是因为我购买了足够的组件和MSDN订阅,因为简单的SMTP功能需要花费100到300美元.

我读到将MaxIdleTime设置得更高可能会有所帮助,但我对此持怀疑态度.我不想仅仅因为Microsoft不想遵循SMTP规范而冒着我的应用程序池被禁用的风险.

编辑: 我查看了quiksoft.com组件,但它不支持SMTP身份验证,它的成本为500美元.必须有一个解决这个问题的方法.

.net asp.net smtp system.net.mail smtpclient

18
推荐指数
2
解决办法
1万
查看次数

System.Net.Mail替代方案

我正在研究一种使用C#中的邮件服务器安排电子邮件的工具.我一直在使用System.Net.Mail类来发送邮件.

最近我遇到了有关RFC违规和其他问题的各种问题,例如SmtpClient没有根据协议结束SMTP会话.这些问题中的每一个都在计入高垃圾邮件分数并影响电子邮件传递,因此我需要解决这些问题.

我想知道其他人为了解决这些问题而采取了什么措施.让人们开始使用第三方组件,如果是这样的话?

编辑:作为支持证据,请参阅:http://www.codeproject.com/KB/IP/MailMergeLib.aspx

.net smtp smtpclient

16
推荐指数
2
解决办法
4903
查看次数

使用.NET SmtpClient将Bcc添加到电子邮件发送?

使用ASP.NET C#中的SMTPClient类发送电子邮件时,如何将bcc添加到电子邮件中?如何将bcc添加到MailMessage实例?

.net c# email smtpclient

16
推荐指数
2
解决办法
4万
查看次数

超出存储分配.服务器响应为:4.3.1邮件大小超过固定的最大邮件大小

我使用SMTPclient发送带附件的邮件.当附件超过2mb时,我收到以下错误:**"超出存储分配.服务器响应是:4.3.1消息大小超过固定的最大消息大小".**

1)我可以使用附件大小> 2mb的smtpclient发送电子邮件**.**如果是,附件的限制是多少.

2)如何解决上述错误?

如果你有解决方案,请给我一个想法.

c# asp.net sharepoint smtpclient email-attachments

16
推荐指数
2
解决办法
2万
查看次数

抛出特定异常时,SmtpClient.SendMailAsync会导致死锁

我正在尝试基于VS2013项目模板中的示例AccountController为ASP.NET MVC5网站设置电子邮件确认.我已经实现了IIdentityMessageService使用SmtpClient,试图尽可能简单:

public class EmailService : IIdentityMessageService
{
    public async Task SendAsync(IdentityMessage message)
    {
        using(var client = new SmtpClient())
        {
            var mailMessage = new MailMessage("some.guy@company.com", message.Destination, message.Subject, message.Body);
            await client.SendMailAsync(mailMessage);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

调用它的控制器代码直接来自模板(由于我想排除其他可能的原因,因此将其解压缩为单独的操作):

public async Task<ActionResult> TestAsyncEmail()
{
    Guid userId = User.Identity.GetUserId();

    string code = await UserManager.GenerateEmailConfirmationTokenAsync(userId);
    var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = userId, code = code }, protocol: Request.Url.Scheme);
    await UserManager.SendEmailAsync(userId, "Confirm your account", "Please confirm your account by clicking <a …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc smtpclient async-await asp.net-identity

16
推荐指数
1
解决办法
5855
查看次数

信箱不可用.服务器响应为:5.7.1无法中继错误

我在netsol服务器上托管了我的一个网站.从那里contact.aspx必须使用交换服务器发送电子邮件.当我尝试发送电子邮件时:

错误:邮箱不可用.服务器响应为:5.7.1无法中继

码:

MailMessage message = new MailMessage(@"xxx@example.com", 
                                      @"test_user@yahoo.com",
                                       "New Message",
                                       "Exchange");
SmtpClient mail = new SmtpClient("exchange.abc.com", 29);
mail.EnableSsl = true;
mail.Credentials = new NetworkCredential(@"xxx@example.com", @"password");
mail.UseDefaultCredentials = false;
mail.DeliveryMethod = SmtpDeliveryMethod.Network;
mail.Send(message);
Run Code Online (Sandbox Code Playgroud)

我试过的选项:

  • 在465或587或25号港口进行测试
  • 更改了SmtpDeliveryMethod.PickupDirectoryFromIis
  • 无法配置IIS(SMTP服务器),因为它托管在其他人的服务器上

c# asp.net smtpclient

15
推荐指数
2
解决办法
11万
查看次数

当SMPT服务器具有有效证书时,"根据验证过程"获取"远程证书无效"

这似乎是一个常见的错误,但是当我找到一个解决方法(见下文)时,我无法确定我首先得到它的原因.

我正在将SMTP功能写入我们的应用程序,并且我正在尝试将SSL功能添加到我们已有的工作SMTP中.

我正在测试使用我们公司的MS Exchange服务器,特别是在其上启用的webmail选项.我可以通过我的代码在内部发送电子邮件,不通过身份验证我的连接并匿名发送,但是由于我们公司的政策,这些电子邮件不会转发到外部电子邮件地址.除此之外,我正在为我们的客户编程,他们并不都允许开放中继和/或匿名连接.

我相信Exchange服务器正在使用显式SSL/TLS.我已经尝试telnet到端口25上的服务器地址并获得文本响应,人类可读的响应,根据我以前的一些搜索意味着它使用显式SSL/TLS.

我有以下测试代码

SmtpClient SMTPClient = new SmtpClient(webmailaddress);
SMTPClient.Port = 25;
SMTPClient.UseDefaultCredentials = true;
SMTPClient.EnableSsl = true;
System.Net.Mail.MailMessage Message = new `
System.Net.Mail.MailMessage(emailFrom,emailTo,subject,body);
SMTPClient.Send(Message);
Run Code Online (Sandbox Code Playgroud)

在我搜索解决方案期间,我遇到了"远程证书根据验证程序无效".使用Gmail SMTP服务器

从中我得到以下代码......

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);

public static bool ValidateServerCertificate(object sender,X509Certificate certificate,X509Chain chain,SslPolicyErrors sslPolicyErrors)
{
    if (sslPolicyErrors == SslPolicyErrors.None)
        return true;
    else
    {
        if (System.Windows.Forms.MessageBox.Show("The server certificate is not valid.\nAccept?", "Certificate Validation", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
            return true;
        else
            return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

这适用于我的测试代码.然而,我正在编写的实际过程(而不是我的测试代码)将在后台运行,并且无法真正询问用户(而是报告Windows错误日志中的错误).

在我开始时,我的问题就是为什么我会收到这个错误.如果我在浏览器中访问https:webmail.ourdomain.co.uk,它会显示一个有效的证书,并且没有安装证书的选项(正如我自己签署的那样).

证书截图 然而,当我运行我的代码,并在ValidateServerCertificate方法调试中断Poing的,我看证书的价值观和看到我们的本地服务器的发行人"之前没有使用",且性能"后,不使用"今天.这与我得到的证书不符.

我还检查了ValidateServerCertificate调试中的sslPolicyErrors标志,它们显示"RemoteCertificateChainErrors"和"RemoteCertificateNameMismatch".

那么我对此缺少什么...为什么它没有使用正确的证书?如果我需要在本地安装证书才能使用它,那么我需要了解它们,这样我就可以告诉客户如果他们得到了这个,该怎么做.

我不想通过从ValidateServerCertificate方法返回true来绕过检查,并且因为它是后台进程我不能问用户,所以我需要了解如何让我的代码使用正确/可信证书.

希望有人可以提供建议.

c# email ssl client-certificates smtpclient

15
推荐指数
2
解决办法
10万
查看次数

SmtpException:仅为具有ASCII本地部分的电子邮件地址配置客户端或服务器

当我尝试将电子邮件发送到包含突出字符(é)的地址时,SmtpClient.Send()方法抛出此异常:

System.Net.Mail.SmtpException:仅为具有ASCII本地部分的电子邮件地址配置客户端或服务器:léo.xxx@example.com.
在System.Net.Mail.Mail上的System.Net.Mail.MailAddress.GetAddress(布局allowUnicode)
中的System.Net.Mail.SmtpClient.ValidateUnicodeRequirement(MailMessage ...)(MailMessage ...
)

消息的制定使我可能有一个设置,我可以激活,以使这项工作,虽然我没有找到任何关于这个主题.

我尝试了几种SMTP服务器,包括Gmail.以下是repro的相关位:

var msg = new MailMessage();
msg.Subject = "Test";
msg.From = new MailAddress("xxx@gmail.com");
msg.To.Add(new MailAddress("léo.yyy@gmail.com"));

new SmtpClient().Send(msg);
Run Code Online (Sandbox Code Playgroud)

的app.config

<system.net>
    <mailSettings>
        <smtp from="xxx@gmail.com">
            <network host="smtp.gmail.com" port="587" userName="xxx@gmail.com" password="password" enableSsl="true" />
        </smtp>
    </mailSettings>
</system.net>
Run Code Online (Sandbox Code Playgroud)

.net c# smtp smtpclient

14
推荐指数
1
解决办法
1万
查看次数