我正在尝试使用 SendGrid 的免费 SMTP 中继从我的 ASP.NET 应用程序发送电子邮件。我可以连接到服务器,但当我尝试进行身份验证时,收到此错误:“SMTP 服务器意外断开连接。”
using (var client = new SmtpClient())
{
client.ServerCertificateValidationCallback =
(sender, certificate, certChainType, errors) => true;
client.AuthenticationMechanisms.Remove("XOAUTH2");
// connection
client.Connect("smtp.host", 465, true);
client.Authenticate("UserName", "Password");//error occurs here
client.Send(email);
client.Disconnect(true);
}
Run Code Online (Sandbox Code Playgroud)
再次,我可以毫无问题地连接,但是当我尝试进行身份验证时,我收到前面提到的错误......
有什么建议么?
干杯
我们使用 MailKit/MimeKit 来转发电子邮件。当尝试发送邮件时抛出错误,例如“偏移量 37 处出现意外令牌”请帮助解决此问题。
跟踪消息如下
at MimeKit.MailboxAddress.set_Address(String value)
at MimeKit.MailboxAddress..ctor(Encoding encoding, String name, String address)
Run Code Online (Sandbox Code Playgroud)
using (var smtpClient = new MailKit.Net.Smtp.SmtpClient())
{
smtpClient.Connect(mailServer, Port, MailKit.Security.SecureSocketOptions.None);
smtpClient.Send(mailMessage);
smtpClient.Disconnect(true);
}
Run Code Online (Sandbox Code Playgroud) 根据 Google 的“不太安全的应用程序弃用通知”的通知,自 2022 年 5 月 30 日起,通过“不太安全的应用程序”访问 Google 帐户的功能将被弃用。下面的 C# 代码是我从我自己的个人 GMail 帐户发送电子邮件的方式。我只从我的应用程序发送电子邮件。我不会从此帐户执行任何其他操作(阅读电子邮件、创建草稿等...),仅发送。基本上,这相当于发送“不回复”电子邮件。
// C# code
using (SmtpClient smtpClient = new SmtpClient(SmtpDomain, SmtpPortNumber))
{
smtpClient.DeliveryMethod = SmtpDeliveryMethod;
smtpClient.UseDefaultCredentials = UseDefaultCredentials;
smtpClient.EnableSsl = true;
smtpClient.Credentials = new NetworkCredential(SmtpUsername, SmtpPassword);
MailMessage mailMessage = new MailMessage { /* ... */ };
smtpClient.Send(mailMessage);
}
Run Code Online (Sandbox Code Playgroud)
我已经开始查看 Google 的 API 和 OAuth 文档,但我觉得我正在陷入一个黑暗的兔子洞,因为我不想访问其他用户的数据,只想从我自己的帐户发送电子邮件。我从研究中假设 OAuth2 是尽可能做事的首选方式,但我找不到“如果你现在这样做”、“那么开始这样做”的明确示例。有人可以指出我更新代码所需路径的绝对起点,以便我可以继续从我自己的个人帐户/应用程序发送电子邮件吗?
我将 mailkit 用于 ASP.Net Core 应用程序,并创建一个 SMTPClient 对象,然后将其连接到 Office365 并使用用户名和密码对我的用户进行身份验证。此连接可以打开多长时间,直到过期或需要重新进行身份验证?另外,有没有办法保持连接处于活动状态而不在到期时间发送电子邮件?
我尝试了以下代码的多种变体,但我仍然得到相同的结果.我想让最后一行"问题描述:......"出现在一个新行上.
我试过vbCrLf,vbCr和&Environment.NewLine&_这些都没有用.
有没有人有任何建议?
只需注意:其他电子邮件格式正确.此外,如果我在"问题标题"行的末尾添加2个vbCr(s),那么它看起来很正常.
特别是这一点似乎是我身边的一根刺.
结果:
代码:
Dim mail As New MailMessage()
Dim strbody As String
strbody = Nothing
'set the addresses
mail.From = New MailAddress("email.address@server.com")
mail.[To].Add(Email_Add)
'set the content
mail.Subject = Issue_Num & " Issue has been created."
strbody = "Your issue has been created." & vbCr & vbCr
strbody += "The Issue Team has received the following issue: " & vbCrLf
strbody += "Issue ID: " & Issue_Num & vbCrLf
strbody += "Issue Title: " & Email_Summary & …
Run Code Online (Sandbox Code Playgroud) 我正在构建一个应该在远程/隔离计算机上运行的Windows窗体应用程序,并通过电子邮件向管理员发送错误通知.我已经尝试过使用System.Net.Mail
类来实现这个目标,但我遇到了一个奇怪的问题:
1.我收到一条错误消息:
System.IO.IOException: Unable to read data from the transport connection:
An existing connection was forcibly closed by the remote host.--->
System.Net.Sockets.SocketException: An existing connection was forcibly closed by
the remote host at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset,
Int32 size, SocketFlags socketFlags) at System.Net.Sockets.NetworkStream.
Read(Byte[] buffer, Int32 offset, Int32 size)
Run Code Online (Sandbox Code Playgroud)
2.我尝试嗅探网络活动,看看发生了什么事情错了.所以这是它的方式:
i) The DNS lookup for my SMTP server's hostname works
ii) My application connects to the SMTP server and sends "EHLO MY-HOSTNAME"
iii) SMTP server responds …
Run Code Online (Sandbox Code Playgroud) 我正在使用 C# 并且在我的 IIS 上我正在发送 smtp 消息(使用本地主机)当人们浏览它时服务器有 SSL 认证(https)我想改进将使用 SSL 发送的邮件发送,所以我添加了这一行:
`client.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;`
`client.UseDefaultCredentials = true;`
`client.EnableSsl = true;`
Run Code Online (Sandbox Code Playgroud)
在创建客户端之后:
var client = new System.Net.Mail.SmtpClient("127.0.0.1");
之前:
client.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;
但是现在当我发送邮件时,我得到:“不得为取件目录递送方法启用 SSL”
请帮忙 :)
我编写了一个从Android设备发送电子邮件的应用程序但是当我尝试发送电子邮件时出现以下异常:
android.os.NetworkOnMainThreadException
为什么会发生这种情况,我该如何解决?
我有一个为每个 MailMessage 调用的以下方法:
public static string SendEmail(MailMessage email)
{
string rez = "";
try
{
var smtpserver = "10.xxx.xx.xx";
using (SmtpClient mailclient = new SmtpClient())
{
mailclient.Host = smtpserver;
mailclient.Send(email);
}
rez = "OK";
}
catch (Exception ex)
{
rez = "NOT OK: " + ex.Message;
}
return rez;
}
Run Code Online (Sandbox Code Playgroud)
我一次发送 32 封电子邮件,对于其中两封,我从 mailclient.Send() 收到以下错误: 不正常:服务不可用,正在关闭传输通道。服务器响应为: 4.3.2 最大并发连接数已超出限制,关闭传输通道
我想知道这是否是因为我为每封邮件创建了一个新的 SmtpClient 实例?
由于只有一个 SmtpClient 实例,以下更改是否可以解决该问题。不幸的是我无法测试它,我只能在生产中尝试它。
public static SmtpClient mailclient = new SmtpClient("10.xxx.xx.xx");
public static string SendEmail(MailMessage email)
{
string rez = …
Run Code Online (Sandbox Code Playgroud) 我在没有对代码进行任何更改的情况下收到此错误。以前,它运行良好。
Depth: 0<br />Exception Type:System.Net.Mail.SmtpException<br />Exception: The server committed a protocol violation The server response was: <br />Inner Source: System<br />Stack Trace: at System.Net.Mail.SendMailAsyncResult.End(IAsyncResult result)
at System.Net.Mail.SmtpClient.SendMailCallback(IAsyncResult result)
Run Code Online (Sandbox Code Playgroud)
我的代码:
private async Task SmtpClientSendMail(MailMessage mailMessage)
{
using (SmtpClient smtpClient = new SmtpClient("smtp.office365.com"))
{
try
{
smtpClient.UseDefaultCredentials = false;
smtpClient.Port = 587;
smtpClient.Credentials = new System.Net.NetworkCredential(emailUserNameCredentials, emailPasswordCredentials);
smtpClient.EnableSsl = true;
smtpClient.Timeout = 200000;
await smtpClient.SendMailAsync(mailMessage);
}
catch (Exception ex)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如 System.Net.WebException 中所建议的:服务器违反了协议
我已将其直接添加到我的 App.config 部分中:
<system.net>
<settings> …
Run Code Online (Sandbox Code Playgroud)