Probleme dans une classe SMTP en .NET 2 [Résolu]

Signaler
Messages postés
23
Date d'inscription
mercredi 21 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2007
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Bonsoir, je suis en pleine création d'une classe Smtp dont voici la source:
using System;
using System.Collections.Generic;
using System.Text;
using m =System.Net.Mail;
using System.Net.Mime;
using System.Net;
using System.Net.Mail;

namespace Mailer.Classes
{
class SmtpSend
{
private string _SmtpServer;
private int _SmtpServerIp;
private string _From;
private string _FromName ;
private string _To;
private string _Subject;
private string _Body;
private string[] _AttchFile;

private m.MailMessage _Message;
/// <summary>
/// Initializes a new instance of the <see cref="SmtpSend"/> class.
/// </summary>
/// L'adresse du serveur SMTP

/// L'IP du serveur SMTP

/// Adresse de l'expéditeur

/// Nom de l'expéditeur

/// Adresse du destinataire

/// Objet du message

/// Contenu du message

/// Fichiers attachés

public SmtpSend(string SmtpServer,int SmtpServerIp,string FromAdress,string FromName,string ToAdress,string Subject,string Body,string[] AttachFile)
{
_SmtpServer = SmtpServer;
_SmtpServerIp = SmtpServerIp;
_From = FromAdress;
_FromName = FromName;
_To = ToAdress;
_Subject = Subject;
_Body = Body;
_AttchFile = AttachFile;
}
// private string[] _AttchFile = { @"C:\temp\CV.doc", @"C:\temp\LM.doc" };
/// <summary>
/// Permet d'envoyer un message électronique.
/// </summary>
/// <returns>Retourne un booléen indiquant si le message a bien été émis.</returns>
public bool IsMailSent()
{
bool blnSuccess = true;

// try
// {
m.SmtpClient smtp = new System.Net.Mail.SmtpClient(this._SmtpServer);
m.MailAddress Sender = new System.Net.Mail.MailAddress(this._From, this._FromName);
m.MailAddress Recept = new System.Net.Mail.MailAddress(this._To);
m.MailMessage _Message = new m.MailMessage();
_Message.From = Sender;

_Message.To.Add(Recept);

_Message.Subject = this._Subject;
_Message.Body = this._Body;
_Message.Headers.Add("X-Mailer", "X-Mailer: EnvoiMail (1.0.1)");
_Message.Headers.Add("Content-Type", "Content-Type: multipart/alternative;");

// Attache au message chacun des éventuels fichiers.
if (this._AttchFile != null)
{
foreach(string str in this._AttchFile)
{
Attachment data = new Attachment(str, MediaTypeNames.Application.Octet);

data.Name = "Un_Nom"; /* Ici se pose le probleme,si je commente cette ligne, le mail ne part pas! Si je met un nom avec une extension, le meme probleme se pose....
Je ne sais pas quoi faire pour corriger se probleme, et faire en sorte que la pièce jointe porte le nom du fichier... */
_Message.Attachments.Add(data);

}
}

// Envoit le message.


smtp.Credentials = CredentialCache.DefaultNetworkCredentials;

smtp.Send(_Message);

// } Les balise try, catch et finally sont commentées, afin de pouvoir deceler les bugs...
// catch (Exception)
// {
blnSuccess = false;
// }
// finally
// {
this._Message = null;
// }
return blnSuccess;
}
}
}
Quelqu'un aurait-il une solution à me proposer ?

10 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Oups, ma phrase du dessus n'est pas très comprehensible en fait

"Le problème pourrait peut être être sur le serveur mail : tu ne testerais pas vers une boite gmail, j'ai abandonner cette chose à cause de ça..."
=> Si tu utilises une boite GMail pour tes test, essaie avec autre chose (type yahoo, marche très bien).
Dans mon cas GMail m'envoyais toujours bouler à chaque fois qu'une pièce jointe était une archive (illegal attachment), ça tombe bien, on n'utilise en général très peu ce genre de chose en pièce jointe...
Car si tu n'as pas de retour d'erreur par le code d'envoi, je ne vois pas pourquoi le mail ne part pas, à moins d'un relai SMTP grincheux sur le trajet :-)

/*
coq
MVP Visual C#
*/
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Pour ta neutralisation utilise plutôt des directives conditionnelles, ça t'éviteras un oublis malencontreux de décommentation :

public bool IsMailSent()
{
bool blnSuccess = true;
#if !DEBUG
try
{
#endif
m.SmtpClient smtp = new System.Net.Mail.SmtpClient(this._SmtpServer);
m.MailAddress Sender = new System.Net.Mail.MailAddress(this._From, this._FromName);
m.MailAddress Recept = new System.Net.Mail.MailAddress(this._To);
m.MailMessage _Message = new m.MailMessage();
_Message.From = Sender;


_Message.To.Add(Recept);


_Message.Subject = this._Subject;
_Message.Body = this._Body;
_Message.Headers.Add("X-Mailer", "X-Mailer: EnvoiMail (1.0.1)");
_Message.Headers.Add("Content-Type", "Content-Type: multipart/alternative;");


// Attache au message chacun des éventuels fichiers.
if (this._AttchFile != null)
{
foreach(string str in this._AttchFile)
{
Attachment data = new Attachment(str, MediaTypeNames.Application.Octet);

data.Name = "Un_Nom"; /* Ici se pose le probleme,si je commente cette ligne, le mail ne part pas! Si je met un nom avec une extension, le meme probleme se pose....
Je ne sais pas quoi faire pour corriger se probleme, et faire en sorte que la pièce jointe porte le nom du fichier... */
_Message.Attachments.Add(data);

}
}

// Envoit le message.


smtp.Credentials = CredentialCache.DefaultNetworkCredentials;


smtp.Send(_Message);

#if !DEBUG
} Les balise try, catch et finally sont commentées, afin de pouvoir deceler les bugs...
catch (Exception)
{
blnSuccess = false;
}
finally
{
this._Message = null;
}
#else
blnSuccess = false;
this._Message = null;
#endif
return blnSuccess;
}

Ainsi la gestion des erreurs sera présente dans le code compilé pour n'importe quel profil de compilation, sauf ceux pour lesquels la constante DEBUG est définie (par défaut juste dans "Debug")

/*
coq
MVP Visual C#
*/
Messages postés
23
Date d'inscription
mercredi 21 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2007

Merci pour cette info, mais le probleme qui ce pose, c'est l'extension du fichier,
pour data.Name = "Un_Nom.extension".
Pour l'extension *.jpg le mail passe par contre pour une extension du type *.rar ou *.zip le mail n'arrive pas dans ma boite mail ...
Peut tu m'eclairer ?
MERCI
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Je ne vois pas trop non.
Le problème pourrait peut être être sur le serveur mail : tu ne testerais pas vers une boite gmail, j'ai abandonner cette chose à cause de ça...

/*
coq
MVP Visual C#
*/
Messages postés
23
Date d'inscription
mercredi 21 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2007

Ok donc je cherche puis je t'informe si je trouve une solution
Messages postés
23
Date d'inscription
mercredi 21 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2007

En fait le mail passe sur gmail quand je renome la piece jointe sans lui mettre d'extension , sinon bam pas de message ....
Messages postés
23
Date d'inscription
mercredi 21 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2007

En fait je reçois a chaque erreur ceci sur ma boite mail d'expedition :
<hr size="2" width="100%">This is the Postfix program at host smtp2-g19.free.fr.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

The Postfix program

<firstwalteau@gmail.com>: host gmail-smtp-in.l.google.com[72.14.205.27] said:
552 5.7.0 Illegal Attachment q18si1559106qbq (in reply to end of DATA
command)

<hr size="2" width="100%">Comment puis-je contourner ça ? Car en fait je peu dorenavent envoyer vers n'importe quelle boite mail...
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
En laissant tomber GM**** :-)
Perso je n'ai aps trouver d'autre solution, j'ai switcher sur une boite yahoo qui contient moins mais qui au moins fonctionne correctement...

/*
coq
MVP Visual C#
*/
Messages postés
23
Date d'inscription
mercredi 21 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2007

Le but de ma classe c'est de pouvoir envoyer des mails vers n'importe quel client...
Donc c'est tout de meme embetant de devoir ce passer de GMAIL ^^
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Tu obtiendras la même chose en envoyant depuis un autre client.
Moi ça le faisait quand je m'en servait en tant que boite backup d'une autre boite alors...

/*
coq
MVP Visual C#
*/