Probleme dans une classe SMTP en .NET 2

Résolu
walteau Messages postés 23 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 13 janvier 2007 - 25 nov. 2005 à 20:50
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 26 nov. 2005 à 16:03
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

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
26 nov. 2005 à 14:46
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#
*/
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
26 nov. 2005 à 10:12
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#
*/
0
walteau Messages postés 23 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 13 janvier 2007
26 nov. 2005 à 13:44
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
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
26 nov. 2005 à 14:02
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#
*/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
walteau Messages postés 23 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 13 janvier 2007
26 nov. 2005 à 14:40
Ok donc je cherche puis je t'informe si je trouve une solution
0
walteau Messages postés 23 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 13 janvier 2007
26 nov. 2005 à 14:50
En fait le mail passe sur gmail quand je renome la piece jointe sans lui mettre d'extension , sinon bam pas de message ....
0
walteau Messages postés 23 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 13 janvier 2007
26 nov. 2005 à 15:46
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...
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
26 nov. 2005 à 15:50
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#
*/
0
walteau Messages postés 23 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 13 janvier 2007
26 nov. 2005 à 15:52
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 ^^
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
26 nov. 2005 à 16:03
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#
*/
0
Rejoignez-nous