Incapable d'envoyer des emails en me servant d'un serveur SMTP en C# via Visual [Résolu]

Messages postés
23
Date d'inscription
mardi 2 février 2010
Dernière intervention
24 mars 2010
- 29 mai 2009 à 15:29 - Dernière réponse :
Messages postés
81
Date d'inscription
lundi 10 avril 2006
Dernière intervention
1 janvier 2010
- 2 juin 2009 à 21:15
Bonjour, je suis présentement en entreprise et il faut que je développe un système qui permet d'envoyer des emails.
J'ai fais plusieurs recherche (autant sur ce site que ailleurs sur le net) et j'ai trouvé qu'avec un serveur SMTP il était possible de réaliser cette tâche.
Pourtant, je n'arrive toujours pas èa envoyer mes emails et j'ai même une classe qui vérifie si je suis capable de me connecter a mon serveur SMTP et ça me retourne toujours false, donc ça ne fonctionne pas.

Je voulais savoir aussi s'il est possible de créer une méthode qui irait chercher notre adresse SMTP peu importe ou je serais et peu importe ma connexion.

Merci beaucoup d'avance pour votre aide! =)

Voici mon code: (il y a 2 classes)

using

System;
using

System.Collections;
using

System.Collections.Generic;
using

System.ComponentModel;
using

System.Data;
using

System.Configuration;
using

System.Drawing;
using

System.Text;
using

System.Windows.Forms;
using

System.Web.Mail;
using

System.Text.RegularExpressions;
namespace

TestEnvoyerMail{

public
partial
class
Form1 :
Form
{

private
TextBox txtCourRec;
// reçoit le email

private
TextBox txtText;
// texte contenu dans le email

private
TextBox txtCourEnv;
// envoit le email

private
TextBox txtSujet;
// Sujet du email

private
Label lblErreur;
// label d'erreur

private
Button btnEnvoyer;

public
static
string serveur =
null;

public
bool envoie =
false;

public Form1(){

creerInterface();

}

public Form1(
string from,
string to,
string subject,
string body,
string nameFrom,
string smtpServer,
EmailType type) // le constructeur ne sert a rien pour le moment.{

mailFrom = from;

mailTo = formatDest(to);

mailSubject = subject;

mailBody = body;

mailFromName = nameFrom;

mailSmtpServer = smtpServer;

typeEmail = type;

}

private
void btnEnvoyer_Click(
object sender,
EventArgs e){

MailMessage email =
new
MailMessage();
serveur =

"smtp10.bellnet.ca";
if (txtCourEnv.Text !"") email.From
this.txtCourEnv.Text;
if (txtCourRec.Text !"") email.To
this.txtCourRec.Text;
if (txtSujet.Text !"") email.Subject
this.txtSujet.Text;
if (txtText.Text !"") email.Body
this.txtText.Text;

email.Priority =
MailPriority.High;

try{

if (serveur ==
""){

MessageBox.Show(
"Vous n'avez pas inscrit de SmtpServer! Donc,le serveur de messagerie par défaut sera utilisé si vous en avez configué un sur votre machine.",
"SmtpServer introuvable",
MessageBoxButtons.OK,
MessageBoxIcon.Information);}

else{

SmtpMail.SmtpServer = serveur;}

if (ValidateEmail(
this.txtCourRec.Text) ==
true && ValidateEmail(
this.txtCourEnv.Text) ==
true){

envoie =

this.sendMail();

if (envoie){

SmtpMail.Send(email);

MessageBox.Show(
"Message envoyé avec succès!",
"Message",
MessageBoxButtons.OK,
MessageBoxIcon.Information);}

else{

MessageBox.Show(
"Le message n'a pas pu être envoyé! La connexion peut être invalide...",
"Erreur",
MessageBoxButtons.OK,
MessageBoxIcon.Error);}

}

else{

MessageBox.Show(
"Un ou plusieurs email(s) est/sont invalide(s)!",
"Avertissement",
MessageBoxButtons.OK,
MessageBoxIcon.Information);}

}

catch (
Exception ex){

while (ex !=
null){

MessageBox.Show(ex.InnerException.ToString());ex = ex.InnerException;

}

MessageBox.Show(
"Error :" + ex.ToString()); lblErreur.Text = ex.Message;

}

}

private
void Form1_Load(
object sender,
EventArgs e){

}

private
string formatDest(
string destEmails){

string emails =
"";

if (destEmails.Length == 0)

return
"";

// si il n'y a que une adresse email, la retourner tel quel

if (destEmails.Length == 1){

return destEmails;}

return emails;}

public
bool setSmtpServer(
string server){

if (mailSmtpServer ==
null)

return
false;

if (server.Length == 0)

return
false;mailSmtpServer = server;

return
true;}

public
bool sendMail(){

try{

if (serveur ==
null)

return
false;

if (serveur.Length == 0)

return
false;

MailMessage m =
new
MailMessage();

StringBuilder msg =
new
StringBuilder();

// Création du corps du mailmsg.Append(

DateTime.Now.ToString(
"dd.MM.yyy - HH:mm:ss") +
"\n\n");msg.Append(

this.txtText.Text); 

// Configuration du mail
SmtpMail.SmtpServer serveur;m.From

this.txtCourEnv.Text;m.Subject =

this.txtSujet.Text;
if (typeEmail EmailType.Text)m.BodyFormat

MailFormat.Text;
if (typeEmail EmailType.HTML)m.BodyFormat

MailFormat.Html;m.Body =

this.txtText.Text;

m.To =
this.txtCourRec.Text;

SmtpMail.SmtpServer.Insert(0,
"smtp10.bellnet.ca"); // Ceci est mon serveur SMTP

if (isValidSmtpServer(
SmtpMail.SmtpServer) ==
true){

SmtpMail.Send(m);

MessageBox.Show(
"Message envoyé avec succès 2!",
"Message",
MessageBoxButtons.OK,
MessageBoxIcon.Information);

return
true;}

else

return
false;}

catch{

return
false;}

}

public
bool ValidateEmail(
string sEmail){

Regex exp =
new
Regex(
@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");

Match m = exp.Match(sEmail);

if (m.Success && m.Value.Equals(sEmail))
return
true;

else
return
false;}

private
bool isValidSmtpServer(
string smtpServer){

SmtpChecker checker =
new
SmtpChecker();

if (checker.Connect(smtpServer, 25) ==
true)
// p-t le port 465{

checker.DisConnect();

return
true;}

return
false;}

public
enum
EmailType{

Text = 0,

HTML = 1,

}

private
void creerInterface(){

this.txtCourRec =
new System.Windows.Forms.
TextBox();

this.txtText =
new System.Windows.Forms.
TextBox();

this.txtCourEnv =
new System.Windows.Forms.
TextBox();

this.txtSujet =
new System.Windows.Forms.
TextBox();

this.lblErreur =
new System.Windows.Forms.
Label();

this.btnEnvoyer =
new System.Windows.Forms.
Button();

this.SuspendLayout();

//

// txtCourRec

//

this.txtCourRec.Location =
new System.Drawing.
Point(120, 50);

this.txtCourRec.Name =
"txtCourRec";

this.txtCourRec.Size =
new System.Drawing.
Size(240, 20);

this.txtCourRec.TabIndex = 2;

this.txtCourRec.Text =
"Charlesw.Laroche@solutions-ndx.com";

//

// txtText

//

this.txtText.Location =
new System.Drawing.
Point(90, 120);

this.txtText.Name =
"txtText";

this.txtText.Multiline =
true;

this.txtText.Size =
new System.Drawing.
Size(300, 300);

this.txtText.TabIndex = 4;

this.txtText.Text =
"Écriver votre message ici...";

//

// txtCourEnv

//

this.txtCourEnv.Location =
new System.Drawing.
Point(120, 16);

this.txtCourEnv.Name =
"txtCourEnv";

this.txtCourEnv.Size =
new System.Drawing.
Size(240, 20);

this.txtCourEnv.TabIndex = 1;

this.txtCourEnv.Text =
"Charlesw.Laroche@solutions-ndx.com";

//

// txtSujet

//

this.txtSujet.Location =
new System.Drawing.
Point(120, 84);

this.txtSujet.Name =
"txtSujet";

this.txtSujet.Size =
new System.Drawing.
Size(240, 20);

this.txtSujet.TabIndex = 3;

this.txtSujet.Text =
"Inscrire le sujet ici...";

//

// lblErreur

//

this.lblErreur.Location =
new System.Drawing.
Point(90, 420);

this.lblErreur.Name =
"lblErreur";

this.lblErreur.Size =
new System.Drawing.
Size(280, 40);

this.lblErreur.TabIndex = 5;

this.lblErreur.Text =
"lblErreur";

//

// btnEnvoyer

//

this.btnEnvoyer.Location =
new System.Drawing.
Point(200, 470);

this.btnEnvoyer.Name =
"btnEnvoyer";

this.btnEnvoyer.Size =
new System.Drawing.
Size(80, 24);

this.btnEnvoyer.TabIndex = 6;

this.btnEnvoyer.Text =
"Envoyer";

this.btnEnvoyer.Click +=
new System.
EventHandler(
this.btnEnvoyer_Click);

//

// TransmitionCourriel

//

this.AutoScaleBaseSize =
new System.Drawing.
Size(5, 13);

this.ClientSize =
new System.Drawing.
Size(500, 540);

this.Controls.Add(
this.txtCourRec);

this.Controls.Add(
this.txtText);

this.Controls.Add(
this.txtCourEnv);

this.Controls.Add(
this.txtSujet);

this.Controls.Add(
this.lblErreur);

this.Controls.Add(
this.btnEnvoyer);

this.FormBorderStyle = System.Windows.Forms.
FormBorderStyle.FixedToolWindow;

this.Name =
"TransmitionCourriel";

this.StartPosition = System.Windows.Forms.
FormStartPosition.CenterScreen;

this.Text =
"Envoyer un email";

this.ResumeLayout(
false);}

}

}

2e classe:

using

System;
using

System.Collections.Generic;
using

System.Text;
using

System.Net.Sockets;
namespace

TestEnvoyerMail{

public
class
SmtpChecker :
TcpClient{

TcpClient client;

NetworkStream stream;

public SmtpChecker(){

client =

new
TcpClient();}

public
bool Connect(
string ServerName,
int Port){

try{

client.Connect(ServerName, Port);

stream = client.GetStream();

return
true;}

catch{

return
false;}

}

public
bool DisConnect(){

try{

client.Close();

return
true;}

catch{

return
false;}

}

}

}

Né pour apprendre ...
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
81
Date d'inscription
lundi 10 avril 2006
Dernière intervention
1 janvier 2010
2 juin 2009 à 21:15
3
Merci
Salut,

   - je ne réussi pas a envoyer des mails sur mon poste, pourtant mon patron lui réussi, pensez-vous que c'est parce que mon poste est mal configuré?
Si le même programme réussi à envoyer un mail depuis un PC et pas un autre : effectivement, c'est étrange.  Vérifie que dans ton programme, le nom du serveur SMTP est bien celle que ta fournit ton FAI. Si avec Outlook, tu arrive à envoyer des mails : reprend la config Outlook pour la mettre dans ton programme. Vérifie tes paramètres réseaux (IP, Masque de sous réseau, passerelle, routes persistentes), si tu a un parfeu sur ton PC : désactive le pour les tests. Vérifie que les deux PC sortent bien par le même routeur, essaie un PING depuis ton PC vers le serveur SMTP, fait un Trace route depuis chaque PC vers le serveur SMTP et compare les routes.  Essai d'ouvrir une session telnet sur le serveur SMTP.

   -J'aimerais aussi savoir s'il était possible de connaitre notre serveur smtp peu importe notre emplacement.
Tu est censé utiliser le même serveur SMTP, où que tu sois : celui de ton FAI. Si ton entreprise est chez Orange, tous les salariés envoye leurs mails en passant par le SMTP orange. Si M. Dupond prend sont portable avec lui et essai d'envoyer un mail depuis chez lui, et en admettant qu'il sois chez Free : Son mail arrive sur le serveur SMTP d'Orange qui le met à la poubelle illico car il provient d'un routeur gérer par Free. Si M. Dupond veut pouvoir envoyer des mails depuis chez lui, il dois faire de l'authentification lors de la négociation de la connexion au serveur SMTP pour qu'Orange le reconnaisse.

Merci DavidWhitewater 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de DavidWhitewater
Messages postés
81
Date d'inscription
lundi 10 avril 2006
Dernière intervention
1 janvier 2010
29 mai 2009 à 19:17
0
Merci
Bonjour, en général les gens font un éffort de présentation lorsqu'ils copie leur code...

Essai cela :
N'oublie pas de préciser :
Using System.Net.Mail;

SmtpClient

client =
new
SmtpClient(
"smtp.club-internet.fr", 25);

MailMessage message =
new
MailMessage(
"Expditeur@club-internet.fr",
"Destinataire@orange.fr",
"Petit mail de démo",
"Voici un mail de dmo pour tester la classe System.Net.Mail...");
client.Send(message);

Bien entendu, le serveur Smtp que tu utilise dois accepter les mails qui sorte de chez toi. Donc utilise le serveur de ton FAI et non pas un serveur au Canada, a moins que tu n'habite là bas.

A plus.
Commenter la réponse de DavidWhitewater
Messages postés
23
Date d'inscription
mardi 2 février 2010
Dernière intervention
24 mars 2010
2 juin 2009 à 17:07
0
Merci
C'est bon pour cela.

Mais, je ne réussi pas a envoyer des mails sur mon poste, pourtant mon patron lui réussi, pensez-vous que c'est parce que mon poste est mal configuré? Que devrais-je faire pour régler ce problème?

J'aimerais aussi savoir s'il était possible de connaitre notre serveur smtp peu importe notre emplacement. Donc, créer une fonction qui nous donnerait notre serveur smtp.

Merci d'avance

Né pour apprendre ...
Commenter la réponse de likemuz25

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.