我的数据提供商允许我访问手机上的邮件,但不能访问互联网。 我正在考虑编写一个实用程序来通过电子邮件获取网页,以便我在旅行时可以在手机上查看网页。我的想法是在我的系统上运行一个服务(运行outlook并连接到Exchange服务器),该服务等待以网址作为主题的“查询邮件”。此服务应该获取网页并使用html内容进行回复。
请建议如何有效实施此方法。有没有可用的实用程序?
答案 0 :(得分:2)
使用系统CDO dll相当简单。我已经有一个工作原型,只需将邮件发送到site2email@gmail.com,您将收到嵌入式网页的答案(如果主题中提供了网址)或附加的网络存档(包含所有资源的mht文件)以防万一在邮件的正文中发送的网址。 以下是您可以使用的快速且脏的代码段:
private void ConvertAndSend(string emailTo,Uri url)
{
try
{
string mimeType;
string charset;
if (NetworkUtils.UrlExists(url.AbsoluteUri,out mimeType,out charset))
{
if (mimeType.Equals("text/html",StringComparison.OrdinalIgnoreCase))
SendUrlToEmail(url.AbsoluteUri,emailTo,charset);
else
{
string fileName = Path.GetFileName(url.AbsoluteUri);
string extension = GetExtensionByMimeType(mimeType);
if (String.IsNullOrEmpty(fileName)
|| fileName.Length > 200)
fileName = DateTime.Now.ToString("yyyyMMddHHmmss");
if (!Path.GetExtension(fileName).Equals(extension
,StringComparison.OrdinalIgnoreCase))
fileName += extension;
string tempFolder = Path.Combine(Server.MapPath("App_Data")
,"TempFiles");
if (!Directory.Exists(tempFolder))
Directory.CreateDirectory(tempFolder);
fileName = Path.Combine(tempFolder,fileName);
new WebClient().DownloadFile(url.AbsoluteUri,fileName);
SendMessage(emailTo,url.AbsoluteUri,Path.GetFileName(fileName),fileName);
}
}
else
{
throw new WebException("Requiested address is not available at the moment.");
}
}
catch (Exception ex)
{
SendMessage(emailTo,url.AbsoluteUri,ex.Message,null);
}
}
public void SendUrlToEmail(string url
,string emailTo
,string charset)
{
Encoding encFrom;
try { encFrom = Encoding.GetEncoding(charset); }
catch { encFrom = Encoding.UTF8; }
CDO.Message msg = null;
ADODB.Stream stm = null;
try
{
msg = new CDO.MessageClass();
msg.MimeFormatted = true;
msg.CreateMHTMLBody(url
,CDO.CdoMHTMLFlags.cdoSuppressNone
,string.Empty
,string.Empty);
//msg.HTMLBodyPart.Fields["urn:schemas:mailheader:Content-Language"].Value = "ru";
msg.HTMLBodyPart.Fields["urn:schemas:mailheader:charset"].Value = "Cp" + encFrom.CodePage;
msg.HTMLBodyPart.Fields["urn:schemas:mailheader:content-type"].Value = "text/html; charset=" + charset;
msg.HTMLBodyPart.Fields.Update();
msg.HTMLBody = documentBody;
msg.Subject = url;
msg.From = Params.Username;
msg.To = emailTo;
msg.Configuration.Fields[GmailMessage.SMTP_SERVER].Value = SmtpServer;
msg.Configuration.Fields[GmailMessage.SEND_USING].Value = 2;
msg.Configuration.Fields.Update();
msg.Send();
}
finally
{
if (stm != null)
{
stm.Close();
Marshal.ReleaseComObject(stm);
}
if (msg != null)
Marshal.ReleaseComObject(msg);
}
}
NetworkUtils.UrlExists是一种发送HEAD的小方法,如果它失败GET请求以确定内容的类型和编码。
答案 1 :(得分:1)
有一个实用程序在sourceforge上执行相同操作:Web2Mail
答案 2 :(得分:0)
Instapaper做了类似的事情 - 它将网页转换为简单的HTML进行阅读。也许不完全是你需要的,但可能是一个很好的起点。