如何发送电子邮件[重复]
Posted
技术标签:
【中文标题】如何发送电子邮件[重复]【英文标题】:How to send email [duplicate] 【发布时间】:2013-05-26 01:59:01 【问题描述】:我是Asp.net
的新用户,我需要使用我的Outlook
从Asp.net
发送电子邮件。
我在 asp 中有一个按钮,当我单击按钮(发送)时,我想发送电子邮件。
我尝试使用 Hotmail 和 Gmail
,但远程服务器被阻止。
如果你不明白我的问题,请告诉我。
我试过这个:
var smtpClient = new SmtpClient
Host = "outlook.mycompany.local",
UseDefaultCredentials = false,
Credentials = new NetworkCredential("myEmail@mycommpany.com", "myPassword")
;
var message = new System.Net.Mail.MailMessage
Subject = "Test Subject",
Body = "FOLLOW THE WHITE RABBIT",
IsBodyhtml = true,
From = new MailAddress("myemail@mycommapny.com")
;
// you can add multiple email addresses here
message.To.Add(new MailAddress("friendEmail@Company.com"));
// and here you're actually sending the message
smtpClient.Send(message);
异常显示:The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.1 Client was not authenticated
请问我该怎么做?
【问题讨论】:
通过 Outlook,您实际上是指 Exchange 吗?如果 Outlook 没有连接到电子邮件服务器,它就无法发送电子邮件,它只是一个客户端。 EmailFrom、EmailTo 等必须使用真实值。还要确保 EmailFrom 是 SMTP 服务器识别并允许的地址,否则将被视为垃圾邮件尝试而被阻止 @DimitarDimitrov 是的,它已连接到电子邮件服务器。我们是公司,我们使用 Outlook 进行交流。我需要从 asp 向每个人发送电子邮件。这是我的任务:S @PeterrPann 对不起,我脑子里一片空白 【参考方案1】:首先获取公司的 SMTP 服务器设置(我猜是从您的系统管理员那里),然后您可以执行以下操作:
// setting up the server
var smtpClient = new SmtpClient
Host = "your.company.smtp.server",
UseDefaultCredentials = false,
EnableSsl = true, // <-- see if you need this
Credentials = new NetworkCredential("account_to_use", "password")
;
var message = new MailMessage
Subject = "Test Subject",
Body = "FOLLOW THE WHITE RABBIT",
IsBodyHtml = true,
From = new MailAddress("from@company.com")
;
// you can add multiple email addresses here
message.To.Add(new MailAddress("neo@matrix.com"));
// and here you're actually sending the message
smtpClient.Send(message);
【讨论】:
SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应是:5.7.1 客户端未通过身份验证.. Exeption ?? @Dimitar 检查用户名和密码。并确保您可以访问服务器。我无法从我的工作网络中访问我的 SMTP 服务器。 我编辑我的问题请参阅 @PeterrPann 看看是否需要启用 SSL ? (再次不确定您的服务器设置),也尝试使用网络凭据的域帐户 ->domain\\account
,password
。如果您需要 SSL,请检查我的 SmtpClient
编辑。【参考方案2】:
试试 Amazon Simple Email Service (http://aws.amazon.com/ses/)。如果您是 Amazon Web Services (AWS) 的新手,可能会有一个学习曲线。但是,一旦您熟悉了他们可以在 Nuget (AWSSDK) 上找到的 SDK,这个过程就非常简单(亚马逊确实有很多可能很古怪的小包装类)。
所以,要回答“如何发送电子邮件?”这个问题,它看起来像:
var fromAddress = "from@youraddress.com";
var toAddresses = new Amazon.SimpleEmail.Model.Destination("someone@somedestination.com");
var subject = new Amazon.SimpleEmail.Model.Content("Message");
var body= new Body(new Amazon.SimpleEmail.Model.Content("Body"));
var message = new Message(subject , body);
var client = ConfigUtility.AmazonSimpleEmailServiceClient;
var request= new Amazon.SimpleEmail.Model.SendEmailRequest();
request.WithSource(fromAddress)
.WithDestination(toAddresses)
.WithMessage(message );
try
client.SendEmail(request);
catch (Amazon.SimpleEmail.AmazonSimpleEmailServiceException sesError)
throw new SupplyitException("There was a problem sending your email", sesError);
【讨论】:
【参考方案3】:从 ASP.net 网站发送出站电子邮件可能会出现问题。即使你得到了正确的 SMTP 信息,你仍然需要处理:
发件人策略框架 (SPF) 白名单/黑名单 验证 反弹您自己很难做到这一点,这就是为什么您可能要考虑改用服务提供商的原因。您只需使用他们的 API(通常是一个 REST 调用),剩下的就交给他们了。以下是三个这样的提供程序:
SendGrid Mandrill MailgunMandrill 有一个低端的免费计划,如果您在 Windows Azure 上使用它,SendGrid 也是如此。即使对于较大的计划,它们都可以负担得起。
我强烈建议将其中之一与他们自己的 API 一起使用,而不是自己使用 System.Net.Mail
。但是,如果您愿意,他们也可以为您充当 SMTP 中继,这样您就可以使用他们的 SMTP 服务器并保持您的System.Net.Mail
代码完好无损。
【讨论】:
Okej Matt 谢谢你的回答【参考方案4】:您可以使用此功能。还有一件事,您必须将电子邮件 smtp 登录名和密码存储在 Web 配置文件中
/// <summary>
/// Send Email
/// </summary>
/// <param name="strFrom"></param>
/// <param name="strTo"></param>
/// <param name="strSubject"></param>
/// <param name="strBody"></param>
/// <param name="strAttachmentPath"></param>
/// <param name="IsBodyHTML"></param>
/// <returns></returns>
public Boolean sendemail(String strFrom, string strTo, string strSubject, string strBody, string strAttachmentPath, bool IsBodyHTML)
Array arrToArray;
char[] splitter = ';' ;
arrToArray = strTo.Split(splitter);
MailMessage mm = new MailMessage();
mm.From = new MailAddress(strFrom);
mm.Subject = strSubject;
mm.Body = strBody;
mm.IsBodyHtml = IsBodyHTML;
//mm.ReplyTo = new MailAddress("replyto@xyz.com");
foreach (string s in arrToArray)
mm.To.Add(new MailAddress(s));
if (strAttachmentPath != "")
try
//Add Attachment
Attachment attachFile = new Attachment(strAttachmentPath);
mm.Attachments.Add(attachFile);
catch
SmtpClient smtp = new SmtpClient();
try
smtp.Host = ConfigurationManager.AppSettings["MailServer"].ToString();
smtp.EnableSsl = true; //Depending on server SSL Settings true/false
System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
NetworkCred.UserName = ConfigurationManager.AppSettings["MailUserName"].ToString();
NetworkCred.Password = ConfigurationManager.AppSettings["MailPassword"].ToString();
smtp.UseDefaultCredentials = true;
smtp.Credentials = NetworkCred;
smtp.Port = 587;//Specify your port No;
smtp.Send(mm);
return true;
catch
mm.Dispose();
smtp = null;
return false;
【讨论】:
我需要使用 WEB.Mail 或 NET.Mail ?? 它们是相同的。您可以在您的 asp.net 应用程序中使用它【参考方案5】:您可以参考以下链接:
http://www.codeproject.com/Tips/371417/Send-Mail-Contact-Form-using-ASP-NET-and-Csharp
send email asp.net c#
希望对你有所帮助。 :)
【讨论】:
我试过了,但对我不起作用:S 仅链接的答案在 *** 上被认为很差 - 链接通常具有有限的生命周期。您应该更新您的答案,以包括如何解决问题的一些细节。 尝试将 EnableSSL 属性设置为 false。以上是关于如何发送电子邮件[重复]的主要内容,如果未能解决你的问题,请参考以下文章
我如何使用 PHP 通过 localhost XAMPP 发送电子邮件 [重复]
如何将电子邮件发送到存储在EditText中的地址? [重复]