我现在正在学习“Pro ASP.NET MVC 4(Professional Apress)”,当我想编译我的项目时收到以下错误:
用户代码
未处理SmtpException发生了'System.Net.Mail.SmtpException'类型的异常 System.dll但未在用户代码中处理 附加信息:发送邮件失败。
这是源代码:
using System.Net.Mail;
using System.Text;
using SportsStore.Domain.Abstract;
using SportsStore.Domain.Entities;
using System.Net;
namespace SportsStore.Domain.Concrete
{
public class EmailSettings
{
public string MailToAddress = "abc@wp.pl";
public string MailFromAddress = "abcd@wp.pl";
public bool UseSsl = true;
public string Username = "abcd@wp.pl";
public string Password = "abcd12";
public string ServerName = "smtp.wp.pl";
public int ServerPort = 465;
public bool WriteAsFile = false;
public string FileLocation = @"c:\sports_store_emails";
}
public class EmailOrderProcessor : IOrderProcessor
{
private EmailSettings emailSettings;
public EmailOrderProcessor(EmailSettings settings)
{
emailSettings = settings;
}
public void ProcessOrder(Cart cart, ShippingDetails shippingInfo)
{
using (var smtpClient = new SmtpClient())
{
smtpClient.EnableSsl = emailSettings.UseSsl;
smtpClient.Host = emailSettings.ServerName;
smtpClient.Port = emailSettings.ServerPort;
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials
= new NetworkCredential(emailSettings.Username,
emailSettings.Password);
if (emailSettings.WriteAsFile)
{
smtpClient.DeliveryMethod
= SmtpDeliveryMethod.SpecifiedPickupDirectory;
smtpClient.PickupDirectoryLocation = emailSettings.FileLocation;
smtpClient.EnableSsl = false;
}
StringBuilder body = new StringBuilder()
.AppendLine("Nowe zamówienie")
.AppendLine("---")
.AppendLine("Produkty:");
foreach (var line in cart.Lines)
{
var subtotal = line.Product.Price * line.Quantity;
body.AppendFormat("{0} x {1} (wartość: {2:c}", line.Quantity,
line.Product.Name,
subtotal);
}
body.AppendFormat("Wartość całkowita: {0:c}", cart.ComputeTotalValue())
.AppendLine("---")
.AppendLine("Wysyłka dla:")
.AppendLine(shippingInfo.Name)
.AppendLine(shippingInfo.Line1)
.AppendLine(shippingInfo.Line2 ?? "")
.AppendLine(shippingInfo.Line3 ?? "")
.AppendLine(shippingInfo.City)
.AppendLine(shippingInfo.State ?? "")
.AppendLine(shippingInfo.Country)
.AppendLine(shippingInfo.Zip)
.AppendLine("---")
.AppendFormat("Pakowanie prezentu: {0}",
shippingInfo.GiftWrap ? "Tak" : "Nie");
MailMessage mailMessage = new MailMessage(
emailSettings.MailFromAddress, // od
emailSettings.MailToAddress, // do
"Otrzymano nowe zamówienie!", // temat
body.ToString()); // treść
if (emailSettings.WriteAsFile)
{
mailMessage.BodyEncoding = Encoding.ASCII;
}
smtpClient.Send(mailMessage);
}
}
}
}
任何想法如何解决这个问题?
这是感染细节:
System.Net.Mail.SmtpException未被用户代码
处理 HResult = -2146233088消息=发送邮件失败。来源=系统
堆栈跟踪: 在System.Net.Mail.SmtpClient.Send(MailMessage消息) 在SportsStore.Domain.Concrete.EmailOrderProcessor.ProcessOrder(购物车 购物车,ShippingDetails shippingInfo)in C:\ Users \用户拉法尔\桌面\ Rozdzial07-11 \ SportsStore \ SportsStore.Domain \混凝土\ EmailOrderProcessor.cs:线 93 在SportsStore.WebUI.Controllers.CartController.Checkout(购物车,ShippingDetails shippingDetails)中 C:\ Users \用户拉法尔\桌面\ Rozdzial07-11 \ SportsStore \ SportsStore.WebUI \ \控制器CartController.cs:行 39 在lambda_method(Closure,ControllerBase,Object []) 在System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase控制器,Object []参数) 在System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext,IDictionary2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
2 参数) 在System.Web.Mvc.Async.AsyncControllerActionInvoker.InvokeSynchronousActionMethod(ControllerContext) controllerContext,ActionDescriptor actionDescriptor,IDictionary2 parameters) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8
1.b__7(IAsyncResult) _) 在System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 在System.Web.Mvc.Async.AsyncResultWrapper.End [TResult](IAsyncResult) asyncResult,Object标签) 在System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult) asyncResult) 在System.Web.Mvc.Async.AsyncControllerActionInvoker。&lt;&gt; c__DisplayClass37。&lt;&gt; c__DisplayClass39.b__33() 在System.Web.Mvc.Async.AsyncControllerActionInvoker。&lt;&gt; c__DisplayClass4f.b__49() 的InnerException: 的HResult = -2147024893 消息=无法找到路径'c:\ sports_store_emails \ c4734a39-5267-4199-bb29-f28542b3c5ac.eml'的一部分。 来源= mscorlib程序 堆栈跟踪: 在System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath) 在System.IO.FileStream.Init(String path,FileMode mode,FileAccess access,Int32 rights,Boolean useRights,FileShare share, Int32 bufferSize,FileOptions选项,SECURITY_ATTRIBUTES secAttrs, String msgPath,Boolean bFromProxy,Boolean useLongPath,Boolean checkHost) 在System.IO.FileStream..ctor(字符串路径,FileMode模式,FileAccess访问,FileShare共享,Int32 bufferSize,FileOptions options,String msgPath,Boolean bFromProxy) 在System.IO.FileStream..ctor(字符串路径,FileMode模式) 在System.Net.Mail.SmtpClient.GetFileMailWriter(String pickupDirectory) 在System.Net.Mail.SmtpClient.Send(MailMessage消息) 的InnerException:
这2个警告:
警告CS0618'FormsAuthentication.Authenticate(string,string)'是 已过时:'推荐的替代方案是使用Membership API, 例如Membership.ValidateUser。有关更多信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=252463“。 SportsStore.WebUI C:\ Users \ rafal \ Desktop \ Rozdzial07-11 \ SportsStore \ SportsStore.WebUI \ Infrastructure \ Concrete \ FormsAuthProvider.cs 10 Active
警告发现同一版本的不同版本之间存在冲突 无法解决的依赖程序集。这些参考 当日志详细程度设置为时,构建日志中会列出冲突 详细。 SportsStore.WebUI
如何解决这个问题?
答案 0 :(得分:0)
//Create Mail body
string Emails = MailId;
string file = Server.MapPath("~/Mail.html");
//Generate Mail Body
string mailbody = "Hi"+" " +Emails;
//Whom to send email
string to = Emails;
//Who is sending mail
string from = "Sender_Mail_Id";
MailMessage msg = new MailMessage(from, to);
msg.Subject = "Auto Response Email";
msg.Body = mailbody;
msg.BodyEncoding = Encoding.UTF8;
msg.IsBodyHtml = true;
SmtpClient client = new SmtpClient("smtp.gmail.com");
client.UseDefaultCredentials = false;
System.Net.NetworkCredential basicCredential = new System.Net.NetworkCredential("User_EMailId", "Password");
client.EnableSsl = true;
client.UseDefaultCredentials = true;
client.Credentials = basicCredential;