J'ai une application C # qui envoie par e-mail des rapports de feuille de calcul Excel via un serveur Exchange 2007 utilisant SMTP. Celles-ci arrivent bien pour les utilisateurs d'Outlook, mais pour les utilisateurs de Thunderbird et Blackberry, les pièces jointes ont été renommées «Partie 1.2».
J'ai trouvé cet article qui décrit le problème, mais ne semble pas me donner une solution de contournement. Je n'ai pas le contrôle du serveur Exchange, je ne peux donc pas y apporter de modifications. Puis-je faire quelque chose du côté C #? J'ai essayé d'utiliser des noms de fichiers courts et un codage HTML pour le corps, mais aucun des deux n'a fait de différence.
Mon code d'envoi de courrier est simplement le suivant:
public static void SendMail(string recipient, string subject, string body, string attachmentFilename)
{
SmtpClient smtpClient = new SmtpClient();
NetworkCredential basicCredential = new NetworkCredential(MailConst.Username, MailConst.Password);
MailMessage message = new MailMessage();
MailAddress fromAddress = new MailAddress(MailConst.Username);
// setup up the host, increase the timeout to 5 minutes
smtpClient.Host = MailConst.SmtpServer;
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = basicCredential;
smtpClient.Timeout = (60 * 5 * 1000);
message.From = fromAddress;
message.Subject = subject;
message.IsBodyHtml = false;
message.Body = body;
message.To.Add(recipient);
if (attachmentFilename != null)
message.Attachments.Add(new Attachment(attachmentFilename));
smtpClient.Send(message);
}
Merci pour toute aide.
c#
email
smtp
attachment
Jon
la source
la source
Attachment.Name
propriété?Name
s'affiche comme nom de la pièce jointe lorsque l'e-mail avec la pièce jointe est reçu. Vous pouvez donc essayer n'importe quelle valeur.Réponses:
Code simple pour envoyer un e-mail avec pièce jointe.
source: http://www.coding-issues.com/2012/11/sending-email-with-attachments-from-c.html
la source
using(SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com")) { //code goes here using(MailMessage mail = new MailMessage()){ //code goes here } }
Le remplissage explicite des champs ContentDisposition a fait l'affaire.
BTW , dans le cas de Gmail, vous pouvez avoir quelques exceptions sur SSL sécurisé ou même le port!
la source
FileInfo
objet pour obtenirCreationTime
,LastWriteTime
, etLastAccessTime
propriétés? Vous en créez un pour obtenir laLength
propriété de toute façon.Voici un simple code d'envoi de mail avec pièce jointe
En savoir plus Envoi d'e-mails avec pièce jointe en C #
la source
Terminer la solution de Ranadheer, en utilisant Server.MapPath pour localiser le fichier
la source
Server.MapPath
vient-il et quand doit-il être utilisé?la source
J'ai créé un code court pour le faire et je souhaite le partager avec vous.
Voici le code principal:
la source
Essaye ça:
la source
J'ai essayé le code fourni par Ranadheer Reddy (ci-dessus) et cela a très bien fonctionné. Si vous utilisez un ordinateur d'entreprise doté d'un serveur restreint, vous devrez peut-être changer le port SMTP sur 25 et laisser votre nom d'utilisateur et votre mot de passe vides car ils seront automatiquement remplis par votre administrateur.
À l'origine, j'ai essayé d'utiliser EASendMail à partir du gestionnaire de paquets nugent, pour me rendre compte qu'il s'agit d'une version payante avec un essai de 30 jours. Ne perdez pas votre temps avec elle à moins que vous ne prévoyiez de l'acheter. J'ai remarqué que le programme fonctionnait beaucoup plus rapidement en utilisant EASendMail, mais pour moi, la gratuité l'emportait rapidement.
Juste mes 2 cents.
la source
Utilisez cette méthode sous votre service de messagerie, il peut attacher n'importe quel corps d'e-mail et pièces jointes à Microsoft Outlook
en utilisant Outlook = Microsoft.Office.Interop.Outlook; // Référence Microsoft.Office.Interop.Outlook depuis local ou nuget si vous utiliserez un agent de build plus tard
la source