2008-12-14 14 views
6

Voici le code que j'ai écrit:Comment envoyer un e-mail depuis mon application C#?

 MailMessage mail = new MailMessage("[email protected]", "[email protected]"); 

     mail.Subject = "This is a test!!"; 
     mail.Body = "testing..."; 

     SmtpPermission connectAccess = new SmtpPermission(SmtpAccess.Connect); 
     System.Console.WriteLine("Access? " + connectAccess.Access); 

     SmtpClient client = new SmtpClient("mail.myurl.com", 2525); 
     client.Send(mail); 

Il ne fonctionne pas. Je reçois une exception à la ligne "client.Send (mail)" qui dit "boîte aux lettres indisponible.La réponse du serveur était (MYLOCALCOMPUTERNAME) [MON IP LOCAL]: 3045 est actuellement pas autorisé à relayer à travers."

connectAccess.Access ne retourne « Connect » (je ne sais pas si cela était nécessaire ... Je l'ai ajouté pour démarrer le processus de dépannage.)

Est-ce que cela veut dire que ma machine locale doit être configuré d'une certaine manière? Qu'en est-il lorsque je déploie mon application sur d'autres machines? Y aura-t-il une configuration locale là-bas? Je cherche simplement à créer un lien de type "Envoyer un commentaire" depuis mon application.

(Note: dans mon application réelle, je me sers de mes adresses e-mail réelle dans les deux « à » et « de » et mon smtp est vraiment mon adresse smtp à l'endroit qui héberge mon URL/site)

Merci!

-Adeena

Répondre

3

est l'adresse de destination sur le même hôte que votre serveur smtp? Sinon, cela expliquerait une erreur de relais.

Le serveur SMTP que vous utilisez doit être la destination finale du message électronique ou le premier saut dans l'échange de courrier. Par exemple, si vous envoyez du courrier à une adresse Yahoo à partir d'une adresse Gmail, le premier serveur de messagerie pour voir le message doit être votre serveur Gmail, ou le serveur Yahoo. Les serveurs entre les deux rejetteront le message parce qu'ils ont désactivé le relais (pour réduire le spam, etc.).

S'il s'agit du même hôte, êtes-vous en mesure de lui envoyer un courrier directement par tout autre moyen?

Essayez ce test via telnet pour voir si votre serveur smtp se comporte correctement: http://www.messagingtalk.org/content/470.html

7

@ Michael: merci pour le lien. C'est très utile.

I pense J'ai trouvé mon problème. J'ai dû ajouter les informations d'identification de connexion après avoir créé mon objet "client". J'ai ajouté la ligne suivante:

client.Credentials = new System.Net.NetworkCredential("myloginat+myurl.com", "mypassword"); 

(désolé - j'ai cette habitude qui, après je recherche une réponse sur le web et dans mes manuels pendant 2 heures, je romps enfin vers le bas et après la question, puis 5 minutes plus tard comprendre cela :) Je pense que le fait d'écrire la question m'aide plus que toute autre chose)

Donc ça fonctionne ... bien que je ne prétendrai pas que je comprends tout sur comment et pourquoi ça marche donc je Je m'attends à rencontrer des problèmes car je donne mon programme à d'autres utilisateurs. c'est-à-dire, tout le monde utilisant le programme qui a une connexion Internet pourra-t-il ouvrir cette connexion smtp à mon serveur? Je ne connais pas la réponse à ça ... Je vais devoir attendre, voir, et en apprendre plus.

Merci! :)

-Adeena

+0

Certains serveurs SMTP requièrent des noms d'utilisateur et des mots de passe - c'est ce que vous avez modifié et résolu le problème. Beaucoup de serveurs SMTP, mes FAI par exemple, n'ont pas besoin de mots de passe parce qu'ils reconnaissent l'IP d'origine comme provenant de la sous-zone de leur ISP. – configurator

0

Vérifiez votre pare-feu. Est-ce que 2525 est ouvert?

0
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Net; 
using System.Net.Mail; 

namespace SendMail 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       SmtpClient client = new SmtpClient("smtp.gmail.com", 25); 
       MailMessage msg = new MailMessage(); 

       NetworkCredential cred = new NetworkCredential("[email protected]", "password"); 
       msg.From = new MailAddress("[email protected]"); 
       msg.To.Add("[email protected]"); 
       msg.Subject = "A subject"; 
       msg.Body = "Hello,Raffi"; 

       client.Credentials = cred; 
       client.EnableSsl = true; 
       label1.Text = "Mail Sended Succesfully"; 
       client.Send(msg); 


      } 
      catch 
      { 
       label1.Text = "Error"; 
      } 
     } 



    } 
} 
Questions connexes