我注意到我们总是这样:
SmtpClient mSmtpClient = new SmtpClient();
// Send the mail message
mSmtpClient.Send(mMailMessage);
Run Code Online (Sandbox Code Playgroud)
并且设置凭据的唯一位置是web.config:
<system.net>
<mailSettings>
<smtp>
<network host="xxx.xx.xxx.229" userName="xxxxxxxx" password="xxxxxxxx"/>
</smtp>
</mailSettings>
</system.net>
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,它是如何自动地将它们排除的?
我正在尝试从C#应用程序发送带有我网站地址的电子邮件.
直到最近,这个工作好几个月.(也许我的提供者改变了一些事情或其他人改变了设置)
这是代码:
private void sendEmail(Email invite) {
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient(smtpServerName);
mail.From = new MailAddress(emailUsername);
mail.To.Add(invite.RecipientEmail);
mail.Subject = invite.MessageSubject;
mail.Body = invite.MessageBody;
SmtpServer.UseDefaultCredentials = false;
SmtpServer.Port = 587;
SmtpServer.Credentials = new System.Net.NetworkCredential(emailUsername, emailPassword);
// SmtpServer.EnableSsl = true;
SmtpServer.Send(mail);
}
Run Code Online (Sandbox Code Playgroud)
这是错误:
SMTP服务器需要安全连接或客户端未经过身份验证.服务器响应是:需要SMTP身份验证.
看看其他问题,我尝试了他们的建议SmtpServer.EnableSsl = true
.这根本不起作用.它给出了以下内容:
System.Net.Mail.SmtpException:服务器不支持安全连接.
我猜我应该禁用SSL并按原样使用它.
有关如何重新发送电子邮件的建议吗?
编辑
我已经尝试过没有SmtpServer.UseDefaultCredentials = false;
我试过它设置为true:SmtpServer.UseDefaultCredentials =true;
我已经尝试评论该行以及以下内容//SmtpServer.Credentials = new System.Net.NetworkCredential(emailUsername, emailPassword);
我已经实现了一个通过.Net SmtpClient发送电子邮件的服务器.邮件发送代码如下:
private static MailMessage SendMail(string to, string subject, string body)
{
MailMessage mailToSend = new MailMessage();
mailToSend.Body = body;
mailToSend.Subject = subject;
mailToSend.IsBodyHtml = true;
mailToSend.To.Add(to);
try
{
mailClient.Send(mailToSend);
}
catch (Exception ex)
{
//Log data...
}
mailToSend.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
在Web.config我已经把邮件的凭据,像这样:
<configuration>
<system.net>
<mailSettings>
<smtp from="autoemail@mailserver.org">
<network host="smtp.mailserver.org" password="pswdpswd" port="25" userName="autoemail" clientDomain="the-domain" enableSsl="true" />
</smtp>
</mailSettings>
</system.net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
电子邮件成功发送,一切正常,但当我登录交换服务器中的电子邮件用户时(例如通过Outlook Web-App)我看不到通过SmtpClient发送的邮件(通过代码)发送的项目夹.
如何在此文件夹中保留已发送邮件的副本?谢谢!
我正在使用Exchange Server发送带有SmtpClient(正在成功发送)的MailMessages,但希望我发送的电子邮件转到我发送的电子邮件地址的已发送文件夹(未发生).
using (var mailMessage = new MailMessage("fromaddress@blah.com", "toaddress@blah.com", "subject", "body"))
{
var smtpClient = new SmtpClient("SmtpHost")
{
EnableSsl = false,
DeliveryMethod = SmtpDeliveryMethod.Network
};
// Apply credentials
smtpClient.Credentials = new NetworkCredential("smtpUsername", "smtpPassword");
// Send
smtpClient.Send(mailMessage);
}
Run Code Online (Sandbox Code Playgroud)
是否有我缺少的配置,以确保我发送的所有来自"fromaddress@blah.com"的电子邮件都到达他们的已发送文件夹?
是否可以使用javascript发送电子邮件?
几个月来我一直有这个问题,这让我疯了.我有一个用C#(.NET 4.5)编写的Windows服务,它基本上使用Outlook帐户发送电子邮件(我认为它是一个office365服务).我知道"凭证顺序"问题,这对我没有影响(许多电子邮件发送正确).
该服务正确启动并开始发送电子邮件.有时当有太多时,我得到服务器错误等待,服务等待几分钟并继续完全自己.
在这些情况下,我得到错误A:
System.Net.Mail.SmtpException: The operation has timed out.
at System.Net.Mail.SmtpClient.Send(MailMessage message)
at Cobranzas.WinService.Email.SendEmail(String subject, String body, String mailTo, String attPath)
at Cobranzas.WinService.CobranzasEmailService.SendEmails(IEnumerable`1 toSend, RepositoryEf emailRepo)
Run Code Online (Sandbox Code Playgroud)
问题:有时,我无法找到模式,它每隔几天发生一次,它会出现超时错误,并且永远不会恢复(重新启动服务会立即修复它).所有后续发送尝试都失败并出现相同的错误.在这种情况下,我混合了错误A和:
System.Net.Mail.SmtpException: Failure sending mail. ---> System.Net.WebException: The operation has timed out.
at System.Net.ConnectionPool.Get(Object owningObject, Int32 result, Boolean& continueLoop, WaitHandle[]& waitHandles)
at System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncDelegate asyncCallback, Int32 creationTimeout)
at System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint)
at System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint)
at System.Net.Mail.SmtpClient.GetConnection()
at System.Net.Mail.SmtpClient.Send(MailMessage message)
--- End of inner exception stack trace ---
at System.Net.Mail.SmtpClient.Send(MailMessage message)
at …
Run Code Online (Sandbox Code Playgroud) 我在ASP NET 5项目中创建一个简单的模拟邮件发件人时遇到了麻烦.
这里的方法:
public static Task SendMail(string Email, string Subject, string Body)
{
SmtpClient client = new SmtpClient();
client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;
client.PickupDirectoryLocation = "C:\\TMP";
MailAddress from = new MailAddress("jane@contoso.com", "Jane " + (char)0xD8 + " Clayton", System.Text.Encoding.UTF8);
MailAddress to = new MailAddress(Email);
MailMessage message = new MailMessage(from, to);
message.Body = Body;
message.BodyEncoding = System.Text.Encoding.UTF8;
message.Subject = Subject;
message.SubjectEncoding = System.Text.Encoding.UTF8;
client.Send(message);
message.Dispose();
return Task.FromResult(0);
}
Run Code Online (Sandbox Code Playgroud)
我已经包含了依赖项'System.Net.Mail',但工具提示说该库在DNX 4.5.1中可用,但在DNX Core 5.0中不可用,并且项目将无法编译.
在我的project.json中有:
"frameworks": {
"dnx451": { },
"dnxcore50": { }
}
Run Code Online (Sandbox Code Playgroud) MailMessage message = new MailMessage();
message.Subject = "test";
message.Body = "test";
message.To.Add("test@gmail.com");
message.From = new MailAddress("bob@internalhost.com");
SmtpClient smtp = new SmtpClient();
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.UseDefaultCredentials = false;
smtp.Host = "172.22.0.20";
smtp.Port = 25;
smtp.Send(message);
Run Code Online (Sandbox Code Playgroud)
知道为什么我可能会收到错误
无法解析远程名称.
显然,由于我已经指定了IP地址,因此无需解析.我可以在端口25上ping IP甚至telnet并成功发送电子邮件.但是,我无法发送电子邮件.
我跑了一个wireshark
跟踪,看起来没有任何流量发送到172.22.0.20
我正在尝试连接到我的Gmail帐户,SmtpClient
但似乎无法正常工作.我指定端口465,启用SSL并定义所有内容,但它需要2分钟,然后只显示一些错误消息未发送.
我在这做错了什么?
try
{
MailMessage msg = new MailMessage();
msg.From = new MailAddress("myemail@gmail.com);
msg.To.Add(new MailAddress("theiremil@email.com));
msg.Subject = "This is the subject";
msg.Body = "This is the body";
SmtpClient sc = new SmtpClient("smtp.gmail.com", 465);
sc.EnableSsl = true;
sc.UseDefaultCredentials = false;
sc.Credentials = new NetworkCredential("myemail@gmail.com", "pass");
sc.DeliveryMethod = SmtpDeliveryMethod.Network;
sc.Send(msg);
erroremail.Text = "Email has been sent successfully.";
}
catch (Exception ex)
{
erroremail.Text = "ERROR: " + ex.Message;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 Mailkit 库发送电子邮件。这是这样做的代码:
public async Task SendAsync(IdentityMessage message)
{
if (message == null)
return;
LinkedResource inline = new LinkedResource(System.Web.Hosting.HostingEnvironment.MapPath($"~/Images/logo.png"))
{
ContentId = Guid.NewGuid().ToString(),
ContentType = new ContentType("image/png")
{
Name = "logo.png"
}
};
var htmlBody = message.Body.Replace("{CID:LOGO}", String.Format("cid:{0}", inline.ContentId));
AlternateView avHtml = AlternateView.CreateAlternateViewFromString(htmlBody, null, MediaTypeNames.Text.Html);
avHtml.LinkedResources.Add(inline);
using (MailMessage objMailMsg = new MailMessage())
{
objMailMsg.AlternateViews.Add(avHtml);
objMailMsg.Body = htmlBody;
objMailMsg.Subject = message.Subject;
objMailMsg.BodyEncoding = Encoding.UTF8;
Properties.Settings.Default.Reload();
string fromEmail = Properties.Settings.Default.FromMail;
string fromName = Properties.Settings.Default.FromName;
string smtpPassword = Properties.Settings.Default.PwdSmtp;
objMailMsg.From = new MailAddress(fromEmail, …
Run Code Online (Sandbox Code Playgroud) smtpclient ×10
c# ×8
.net ×3
email ×3
mailkit ×2
smtp ×2
.net-4.5 ×1
asp.net ×1
html ×1
javascript ×1
mailmessage ×1
web-config ×1
windows ×1