2011-12-01 70 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