25 votes

Comment puis-je enregistrer un e-mail au lieu de les envoyer lors de l'utilisation de SmtpClient?

Je suis à l'aide de SmtpClient envoyer un email avec une pièce jointe. Cependant, pour un certain lot, nous devons en quelque sorte sauver la MailMessage au lieu de les envoyer. Nous sommes alors penser à/en espérant pour télécharger manuellement les messages pour les utilisateurs de dossier brouillons.

Est-il possible de sauvegarder ces messages avec la pièce jointe intacte (ce qui est impossible, j'aurais pensé). Ou sinon télécharger les messages d'un dossier dans le compte de l'utilisateur?

Si quelqu'un a une expérience de cela, j'aimerais beaucoup avoir un peu d'aide ou un pointeur.

37voto

Leah Points 2156

Dans l'ASP .Net lors de l'essai de nous sauver de nos e-mails dans un dossier, plutôt que de les envoyer. Vous pourriez peut-être modifier vos paramètres comme ceci pour votre lot?

    <system.net>
	<mailSettings>
		<smtp deliveryMethod="SpecifiedPickupDirectory">
			<specifiedPickupDirectory pickupDirectoryLocation="c:\Temp\mail\"/>
		</smtp>
	</mailSettings>
</system.net>

6voto

dotjoe Points 11959

Il y a un system.net réglage de dans l'app.fichier de configuration.

http://weblogs.asp.net/dfindley/archive/2006/04/23/Migrating-from-System.Web.Mail-to-System.Net.Mail.aspx

<system.net>

    <mailSettings>

      <smtp deliveryMethod="Network">

        <network host="mail.mydomain.com" port="25" />

      </smtp>

      <!-- Use this setting for development

      <smtp deliveryMethod="SpecifiedPickupDirectory">

        <specifiedPickupDirectory pickupDirectoryLocation="C:\Temp" />

      </smtp>
  -->

</mailSettings>

6voto

Avram Points 3044

Ce qui peut aider - Ajout de la méthode Save() de la fonctionnalité de Microsoft.Net.Mail.MailMessage
Le principal ideia, faire une extension de MailMessage ,que par la réflexion de faire une méthode de sauvegarde.

5voto

Chris S Points 32376

Ainsi que l' SpecifiedPickupDirectory de l'information des autres réponses, si vous voulez vous assurer que vos e-mails sont envoyés dans un dossier relatif à la racine du site - très pratique pour les tests sur les serveurs de build où vous ne connaissez pas les chemins - vous pouvez ajouter une vérification rapide dans votre e-mail de l'envoi de code:

    SmtpClient client = new SmtpClient();
    ...

    // Add "~" support for pickupdirectories.
    if (client.DeliveryMethod == SmtpDeliveryMethod.SpecifiedPickupDirectory && client.PickupDirectoryLocation.StartsWith("~"))
    {
        string root = AppDomain.CurrentDomain.BaseDirectory;
        string pickupRoot = client.PickupDirectoryLocation.Replace("~/", root);
        pickupRoot = pickupRoot.Replace("/",@"\");
        client.PickupDirectoryLocation = pickupRoot;
    }

Et vos tests ressembler à quelque chose comme ceci (assurez-vous d'utiliser App_Data donc IIS peut écrire dans le dossier):

    // Arrange - get SitePath from AppDomain.Current.BaseDirectory + ..\
    string pickupPath = Path.Combine(SitePath, "App_Data", "TempSmtp");
    if (!Directory.Exists(pickupPath))
        Directory.CreateDirectory(pickupPath);

    foreach (string file in Directory.GetFiles(pickupPath, "*.eml"))
    {
        File.Delete(file);
    }

    // Act (send some emails)

    // Assert
    Assert.That(Directory.GetFiles(pickupPath, "*.eml").Count(), Is.EqualTo(1));

-5voto

Yes - that Jake. Points 9184

Cela dépend fortement de l'e-mail du client et de son API d'automatisation. SMTP est un envoi de mail et du protocole de transfert. Il n'a aucune faculté pour l'enregistrement ou encore la récupération d'e-mail.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X