2009-07-17 8 views
0

J'ai une page Web que je voudrais que les utilisateurs puissent envoyer à un ami en cliquant sur un bouton. J'utilise actuellement MailMan de Chilkat mais je continue à avoir des problèmes intermittents avec lui. Il semble qu'occasionnellement, lors de la première tentative d'envoi, il envoie une exception de pointeur nul. Ensuite, si vous essayez à nouveau exactement la même page, il n'envoie aucun problème.Des suggestions pour les composants à implémenter "Envoyer à un ami"?

  • sont là- -il d'autres éléments qui y faire ce que je suis en train faire?
  • Serait-il plus facile de redresser mon propre composant léger pour le faire?
  • Quelqu'un at-il eu le problème ci-dessus que peut être résolu facilement et puis je ne dois pas à vous soucier de ce qui précède?

EDIT: Peut-être que je devrais préciser quelque chose. Je sais comment envoyer des emails. Ce n'est pas le problème. Le composant Chilkat que j'utilisais pouvait intégrer une page Web et l'envoyer dans un e-mail. La personne qui le reçoit a alors un e-mail avec tous les CSS inclus et les images et tout dans le courriel.

Répondre

1

Ce n'est en fait pas un exercice trivial.

Ce que vous voulez faire, c'est télécharger le HTML (ce qui est la partie facile). Vous devez ensuite l'analyser et extraire toutes les références css et références d'image, et:

  1. Intégrer eux dans l'e-mail, ou

  2. Convertir tous les liens vers des liens absolus.

Lorsque vous regardez tout le mauvais HTML là-bas, vous trouvez que ce n'est pas trivial. La raison pour laquelle je le sais, c'est que j'ai écrit cette fonctionnalité dans aspNetEmail (www.aspNetEmail.com), et j'ai dû tenir compte de toutes sortes de mauvais HTML.

+0

Je me rends compte que ça va être un bugger. Je suis juste à la fin pour essayer de comprendre ce qui cause mon exception de pointeur nul avec Chilkat. Je vais jeter un coup d'oeil à votre produit. – uriDium

+0

Si vous avez des questions, ou des suggestions de fonctionnalités, faites le moi savoir. Nous pouvons prendre cette liste. Contactez-moi simplement via mon site Web. À la votre! Dave –

0

1) .NET est livré avec une classe raisonnablement adéquate pour l'envoi de courrier, dans System.Net.Mail.

2) Si cela arrive rarement et ne se répète pas, placez-le dans un bloc try et réessayez deux fois de plus avant de le considérer comme un échec. Bien que cela puisse paraître grossier, c'est une solution très efficace.

+0

J'ai pensé à cela mais je suis un peu anale et je veux résoudre le problème. Mais je l'ai fait dans l'intervalle. Encore une fois cependant, à la recherche d'un moyen de faire la chose "envoyer à un ami". – uriDium

+0

Quel est le problème clé ici qui vous empêche d'utiliser System.Net.Mail?Est-ce que vous voulez envoyer une page HTML, complète avec des pièces jointes contenant le CSS, des images et ainsi de suite? –

1

Pourriez-vous utiliser la classe WebClient pour obtenir la page Web demandée par l'utilisateur? Vous voudriez modifier les liens relatifs à des liens absolus (par exemple de « /images/logo.gif » à « http://myapp.com/images/logo.gif »), puis prendre la sortie et l'utiliser comme le corps de l'objet MailMessage

-à-dire

public void MailToAFriend(string friendMailAddress, Uri uriToEmail) { 
    MailMessage message = new MailMessage(); 
    message.From = "[email protected]"; 
    message.To = friendEmailAddress; 
    message.Subject = "Check out this awesome page!"; 
    message.Body = GetPageContents(uriToEmail); 

    SmtpClient mailClient = new SmtpClient(); 
    mailClient.Send(message); 
} 

private string GetPageContents(Uri uri) { 
    var webClient = new WebClient(); 
    string dirtyHtml = webClient.DownloadString(uri); 
    string cleanedHtml = MakeReadyForEmailing(dirtyHtml); 
    return cleanedHtml; 
} 

private string MakeReadyForEmailing(string html) { 
    // some implementation to replace any significant relative link 
    // with absolute links, strip javascript, etc 
} 

Il existe de nombreuses ressources sur Google pour vous aider à faire le remplacement.

Questions connexes