我无法发送电子邮件smtp错误

时间:2016-04-29 12:35:10

标签: c# asp.net smtp

我现在正在学习“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,IDictionary 2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary 2   参数)          在System.Web.Mvc.Async.AsyncControllerActionInvoker.InvokeSynchronousActionMethod(ControllerContext)   controllerContext,ActionDescriptor actionDescriptor,IDictionary 2 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个警告:

  1. warrnig
  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

    1. Warrning
    2.   

      警告发现同一版本的不同版本之间存在冲突   无法解决的依赖程序集。这些参考   当日志详细程度设置为时,构建日志中会列出冲突   详细。 SportsStore.WebUI

      如何解决这个问题?

1 个答案:

答案 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;
相关问题