2010-07-23 6 views
3

Nous développons une application Windows .NET en C# pour une distribution commerciale.Envoi d'une pièce jointe en C# Application Windows

Objectif

Je veux ajouter une fonction pour permettre à l'utilisateur d'envoyer un fichier à un destinataire de courrier électronique dans l'application sans avoir besoin d'un client de messagerie sur leur PC, juste une connexion Internet. L'e-mail qu'ils envoient doit apparaître comme provenant d'eux (c'est-à-dire que leur adresse e-mail figure dans le champ FROM/REPLYTO) afin que le destinataire puisse identifier l'origine de l'e-mail et y répondre.

Approche actuelle

je comptais utiliser la classe MailMessage dans System.Net.Mail, mais il nécessite un serveur SMTP pour envoyer l'e-mail. Le problème avec cela est, je ne veux pas que l'utilisateur doive configurer n'importe quoi pour envoyer des emails de notre application - je veux le configurer par nous. En d'autres termes, je veux définir de quel serveur SMTP envoyer l'email et le coder en dur dans l'application.

J'ai essayé d'utiliser Gmail comme serveur SMTP, mais un inconvénient majeur: Gmail réécrit automatiquement la ligne "De" de tout courriel que vous envoyez via leur passerelle SMTP vers votre adresse Gmail, alors quand nous l'avons testé, même si dans le code MailMessage nous avons mis la propriété à [email protected] dE, quand le message a été reçu, le champ affiché [email protected]

questions

  1. Si ce logiciel l'application va être distribuée à de nombreux utilisateurs dans différents environnement de réseau Cette méthode est-elle la meilleure à utiliser? Si oui, y a-t-il un serveur SMTP gratuit/public que je peux utiliser pour notre application afin de permettre à l'utilisateur final de définir les champs FROM et REPLYTO?

  2. On m'a dit que tous les FAI/organisations n'autoriseraient pas les connexions SMTP arbitraires et/ou que l'expéditeur implémente un enregistrement SPF, le message pourrait être rejeté. Cela signifie-t-il que mon approche ne fonctionne pas toujours?

  3. Y at-il une autre méthode commune ou plus stable que je pourrais utiliser pour atteindre mon objectif original?

Répondre

1

Je ne pense pas que vous puissiez garantir qu'un serveur smtp sera toujours disponible. par exemple. Le smtp de gmail est bloqué à mon bureau.

Vous êtes probablement mieux de créer un service Web auquel ils envoient la pièce jointe, puis vous l'acheminez via votre serveur de messagerie.

+0

Salut Conrad, merci pour votre réponse. Un service Web que vous suggérez serait-il plus stable et aurait moins de chance de se bloquer? Y a-t-il quelque chose que je devrais savoir dans le développement d'un tel webservice, par exemple, des blocs possibles? – user40432

1

1) Je serais surpris si vous trouviez un serveur SMTP public pour faire cela car il serait simplement utilisé comme un relais de spam.

2) Un grand nombre de FAI résidentiels empêchent le trafic SMTP de quitter leur réseau. Cependant, ils le font en bloquant le port 25, donc si vous hébergez votre propre serveur SMTP sur un autre port, il ne sera pas bloqué sauf dans les cas les plus extrêmes.

3) voir ci-dessous

Je vois deux éléments que vous devez adresser:

Faire passer le message de l'expéditeur de vous
suggestion de Conrad d'utiliser un service Web est un bon comme vous donne plus de contrôle sur le transport du message pour vous. Vous pouvez implémenter toute l'authentification que vous jugez nécessaire pour vous assurer que la personne qui envoie le message est légitime. Vous pouvez utiliser SMTP pour envoyer les messages via un serveur de messagerie que vous hébergez, mais vous devez vous concentrer sur le fait de savoir qui envoyer en toute sécurité et qui ne le fait pas afin de ne pas vous retrouver comme un relais de spam.

Envoi du message de votre part au destinataire
Vous pouvez quand même envoyer le message au destinataire final via SMTP à leur hôte de messagerie. Je suggère d'envoyer l'email avec le de votre application (ex: [email protected]) et de définir l'adresse de réponse pour votre expéditeur d'origine. Si vous essayez d'utiliser leur adresse dans le champ, vous obtiendrez plus de rejets de spam.

Si j'ai bien compris votre description, les messages ne seront envoyés qu'aux autres utilisateurs de l'application?
Si tel est le cas, vous pouvez prendre l'itinéraire du service Web sur les deux parties de la communication. L'expéditeur envoie le message à votre serveur centralisé via un appel de service Web. Lorsque l'utilisateur destinataire ouvre le logiciel, il vérifie auprès de votre serveur si des messages sont en attente.

EDIT:
Oui, la partie sur les e-mails de destination, je pouvais lire dans les deux sens, suppose que je me penche vers le mauvais.

Vous devrez livrer les messages à la fin via smtp, je suggère toujours d'utiliser les vôtres et de mettre l'expéditeur dans la réponse, sauf si ce sont des clients professionnels que vous pouvez ajouter votre serveur smtp à leur SPF enregistrements.

En outre, étudiez des cibles de messagerie importantes spécifiques telles que Yahoo! et GMail pour savoir comment interagir avec eux tels que: http://mail.google.com/support/bin/answer.py?hl=en&answer=81126
http://help.yahoo.com/l/us/yahoo/mail/postmaster/postmaster-15.html
http://help.yahoo.com/l/us/yahoo/mail/postmaster/bulkv2.html

+0

Salut ManiacZX Merci pour votre réponse. Juste quelques commentaires 1) J'ai implémenté le protocole SMTP de Hotmail dans notre code, et les tests initiaux semblent fonctionner correctement. Cependant, je suppose qu'il peut être bloqué pour diverses raisons s'il est exécuté à partir d'autres réseaux par l'utilisateur final de notre logiciel. 2) Hotmail SMTP utilise le port 25, mais aussi le port 587 avec TLS ou cryptage SSL si 25 est bloqué. – user40432

+0

3) Vous avez peut-être mal compris ma description originale. Notre application Windows est un outil logiciel financier. Tout comme de nombreux autres outils logiciels, il crée un fichier de données (comme xls pour Excel et doc pour Word).Je veux ajouter une fonction dans notre logiciel pour permettre à l'utilisateur d'envoyer le fichier à n'importe quel destinataire d'email. Toutefois, au lieu de lancer leur client de messagerie par défaut dans Windows et de l'envoyer par le biais de cette option, il est similaire à l'option «Fichier> Envoyer à> Destinataire du message (en pièce jointe)» dans Microsoft Office. adresse, puis nous envoyons le fichier par programmation. – user40432

+0

Si hotmail vous permet de définir le à partir de qui vous voulez, je serais prudent dans l'utilisation d'une application publiée car je doute que c'est une fonctionnalité prévue et pourrait donc changer à tout moment. – ManiacZX

0

Je l'ai utilisé quelque chose de similaire à this pour envoyer des courriels sans avoir à compter sur smtp. YMMV