Mail C# Reprise sur erreur

chinois0013 Messages postés 33 Date d'inscription jeudi 2 juin 2005 Statut Membre Dernière intervention 2 juin 2009 - 2 juin 2009 à 12:19
supcomiene Messages postés 2 Date d'inscription mercredi 3 mars 2010 Statut Membre Dernière intervention 4 mars 2010 - 3 mars 2010 à 17:39
Bonjour,
J'ai écrit un petit executable en c# (voir ci-dessous) qui me permet d'envoyer des analyses à ma direction qutodiennement via un batch planifié.
Tout fonctionne correctement, mais...
Lorsque la connexion internet tombe ou bien le serveur de mail est down, les envois ne fonctionnent pas. Et du coup rien n'est envoyé.
Comment puis je faire pour que l'envoi se fasse plus tard si la connexion ou le serveur de mail ne fonctionne pas ?
Merci d'avance


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;

namespace EnvoiAnalyseMail
{
class Program
{
static void Main(string[] args)
{
string Destinataire = "";
string Mois = DateTime.Today.Month.ToString();
string Jour = DateTime.Today.Day.ToString();

if (int.Parse(Mois) < 10)
Mois = "0" + Mois;
if (int.Parse(Jour) < 10)
Jour = "0" + Jour;

string Date = DateTime.Today.Year.ToString() + Mois + Jour;
bool Dest=false;
List<string> Rapports = new List<string>();
int i = 0;

foreach (string s in args)
{
if (s.Equals("-"))
{
Dest = true;
}
else
{
if (Dest.Equals(true))
{
if (Destinataire.Equals(""))
Destinataire = s;
else Destinataire = Destinataire + "," + s;
}
else
{
Rapports.Add(s);
i++;
}
}
}
EnvoieMail(Rapports, Destinataire,Date);

}

private static void EnvoieMail(List<string> Rapports, string Destinataire,string date)
{
System.Net.Mail.MailMessage email = new System.Net.Mail.MailMessage();
foreach (string s in Rapports)
{
Attachment PieceJointe = new Attachment(s+"-"+date+".PDF");
email.Attachments.Add(PieceJointe);
}

email.From = new MailAddress("informatique@texto-france.fr");
email.To.Add(Destinataire);
email.Subject = "Analyses Quotidiennes";
email.Body = "Bonjour, \nVoici les analyses quotidiennes.\nCordialement,\n\nLe Service Informatique";


SmtpClient client = new SmtpClient("smtp.fr.oleane.com");
client.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
client.Send(email);
}
}
}
</string></string></string>

3 réponses

chinois0013 Messages postés 33 Date d'inscription jeudi 2 juin 2005 Statut Membre Dernière intervention 2 juin 2009
2 juin 2009 à 12:20
Oups désolé pour la mise en page !!
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
2 juin 2009 à 15:39
Salut.
Une solution simple, c'est de faire ton client.Send(email); dans un try / catch. Puis, dans ce catch, tu sauvegardes, dans un fichier à part, les données de ton email.
Et au lancement de ton programme, tu regardes si ces fichiers existent, tu récupères ses données, tu envoies ton mail, et si l'envoi a fonctionné, tu supprime les fichier.

Donc pour résumer (très simplifié) :

foreach(fichier d'email non envoyé)
{
  try
  {
    création d'un nouvel email à partir des données du fichier
    envoi de l'email
    suppression du fichier
  }catch { }
}

création d'un nouvel email à partir des données de la journée
try
{
  envoi de l'email
}catch{
  création d'un fichier à partir du contenu de ton email
}

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
supcomiene Messages postés 2 Date d'inscription mercredi 3 mars 2010 Statut Membre Dernière intervention 4 mars 2010
3 mars 2010 à 17:39
bonjour
J'ai une question en ce qui concerne l'envoie d'un mail par un code c#
est ce que je peux utilisé comme adresse de l'expéditeur une adreesse gmail
avec cette adresse du serveur smtp "smtp.gmail.com"
Bon, j'ai essayé mais ça ne marche pas
j'obtient l'erreur suivant "Échec d'envoi du courrier."
J'ai pas compris pourquoi ça ne marche pas.
Est ce que je dois configurer un serveur smtp propre à moi?
Merci d'avance
0
Rejoignez-nous