我有一个网页,我希望用户只需点击一下按钮即可发送给朋友。我目前正在使用Chilkat的MailMan,但我一直遇到间歇性问题。它似乎偶尔在第一次尝试邮件时抛出空指针异常。然后,如果再次尝试完全相同的页面,则不会发出任何问题。
修改 也许我应该清楚一些事情。我知道如何发送电子邮件。那不是问题。我使用的Chilkat组件可以接收一个网页并将其放入电子邮件中并发送。然后收到它的人会收到一封电子邮件,其中包含所有CSS以及图片和电子邮件中的所有内容。
答案 0 :(得分:1)
您是否可以使用WebClient类获取用户请求的网页?您想要更改绝对链接的任何相对链接(例如从“/images/logo.gif”更改为“http://myapp.com/images/logo.gif”),然后获取输出并将其用作MailMessage对象的主体
即
public void MailToAFriend(string friendMailAddress, Uri uriToEmail) {
MailMessage message = new MailMessage();
message.From = "your_email_address@yourserver.com";
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
}
Google上有很多资源可以帮助您开始使用正则表达式进行替换。
答案 1 :(得分:1)
这实际上不是一项微不足道的工作。
您想要做的是下载HTML(这是简单的部分)。然后,您必须解析它,并提取所有css引用和图像引用,并且:
将它们嵌入电子邮件或
将所有链接转换为绝对链接。
当你看到那里所有糟糕的HTML时,你会发现这不是一件好事。我之所以知道这一点,是因为我将这个功能写入了aspNetEmail(www.aspNetEmail.com),并且不得不考虑各种不良的HTML。
答案 2 :(得分:0)
1).NET在System.Net.Mail中提供了一个足够合适的发送邮件类。
2)如果它很少发生并且不重复,只需将其放入try块并再次重试两次,然后再将其视为失败。虽然听起来很粗糙,但这是一个非常有效的解决方案。