2011-12-01 68 views
0

对于我的silverlight项目,我创建了一个可以通过特定页面发送的新闻邮件。在silverlight中创建新闻邮件

为此,我有一个通讯服务,在这里可以看到:

 public bool SendMail(string emailTo, string emailFrom, string msgSubject, string msgBody) 
    { 
     bool success = false; 
     try 
     { 
      MailMessage msg = new MailMessage(); 
      msg.From = new MailAddress(emailFrom); 
      msg.To.Add(new MailAddress(emailTo)); 
      msg.Subject = msgSubject; 
      msg.Body = msgBody; 
      msg.IsBodyHtml = true; 
      SmtpClient smtp = new SmtpClient(); 
      smtp.Host = "smtp.gmail.com"; // Replace with your servers IP address 
      smtp.Port = 465; 
      smtp.EnableSsl = false; 
      smtp.Send(msg); 
      success = true; 
     } 

     catch(Exception e) 
     { 
      success = false; 
     } 

     return success; 

    } 

我要求服务用下面的代码发送邮件:

public partial class Nieuwsbrief : UserControl 
{ 
    IEnumerable<Inschrijvingen> ingeschrevenen = null; 

    public Nieuwsbrief() 
    { 
     InschrijvingenServiceClient personclient = new InschrijvingenServiceClient(); 

     personclient.getInschrijvingenCompleted += new EventHandler<getInschrijvingenCompletedEventArgs>(personclient_getInschrijvingenCompleted); 
     personclient.getInschrijvingenAsync(); 

     InitializeComponent(); 
    } 

    private void btnSubmit_Click(object sender, RoutedEventArgs e) 
    { 
     NieuwsbriefServiceClient client = new NieuwsbriefServiceClient(); 

     //foreach (Inschrijvingen person in ingeschrevenen) 
     //{ 
      client.SendMailAsync("[email protected]", "[email protected]", txtSubject.Text, txtContent.Text); 
     //} 

     client.SendMailCompleted += new EventHandler<SendMailCompletedEventArgs>(client_SendMailCompleted); 
    } 

    void personclient_getInschrijvingenCompleted(object sender, getInschrijvingenCompletedEventArgs e) 
    { 
     ingeschrevenen = e.Result; 
    } 

    void client_SendMailCompleted(object sender, SendMailCompletedEventArgs e) 
    { 
     if (e.Error != null) 
      txtContent.Text = "Mail has NOT send!" + e.Error.ToString(); 
     else 
      MessageBox.Show(e.Result.ToString()); 
    } 
} 

然而,当我按下btnSubmit什么也没有发生,直到我关闭服务器,然后我得到以下错误:

Mail has NOT send!System.ServiceModel.CommunicationException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound. 
    at System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) 
    at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState) 
    at System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__0(Object sendState) 
    --- End of inner exception stack trace --- 
    at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) 
    at System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 
    at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result) 
    --- End of inner exception stack trace --- 
    at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result) 
    at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result) 
    at System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result) 
    at OndernemersAward.NieuwsbriefServiceReference.NieuwsbriefServiceClient.NieuwsbriefServiceClientChannel.EndSendMail(IAsyncResult result) 
    at OndernemersAward.NieuwsbriefServiceReference.NieuwsbriefServiceClient.OndernemersAward.NieuwsbriefServiceReference.NieuwsbriefService.EndSendMail(IAsyncResult result) 
    at OndernemersAward.NieuwsbriefServiceReference.NieuwsbriefServiceClient.OnEndSendMail(IAsyncResult result) 
    at System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result) 

我希望有人能帮助我, 谢谢:)

回答

1

在你的catch语句做到这一点:

catch (Exception e) 
{ //<---- Put the break point here. 

} 

您就可以看到“E”,看看为什么这是失败的。

我的猜测是它的smtp.Send这是失败的,它可以抛出a lot of exceptions,所以我不会冒险猜测哪一个!

编辑:另外,它表示“//替换为您的服务器IP地址”,您是否将其替换为您的服务器的IP地址?我第一次假设你发布了演示代码,但我想确定。

嗯,这是你的问题! Gmail可让您将它们用作smtp服务器。使用它们:http://www.geekzone.co.nz/tonyhughes/599。您必须将您的smtp.Port更改为465,将smtp.Host更改为smtp.gmail.com。这需要认证,所以去创建一个Gmail帐户。

+0

我没有服务器,所以我只是试图从本地运行它,我希望这不是一个问题? – Schoof

+0

是的。那是你的问题。它会抛出一个异常,说没有SMTP服务器。看我的编辑。 – DanTheMan

+0

啊谢谢,有什么办法可以使它在localhost上工作吗?像gmail的smtp服务器? – Schoof