2009-05-05 1 views
1

私は、Webページのコンテンツをプルする必要があるSharePointタイマージョブを作成し、そのHTMLを電子メールで送信します。プログラムで電子メールでWebページを送信する。画像のURLが解決されていない

私はHttpWebRequestとHttpWebResponseオブジェクトを使用してコンテンツを取得しています。

メール機能は、1つの問題を除いて正常に機能します。

私の電子メールのコンテンツを提供するWebページには画像が含まれています。

ページのhtmlが電子メールとして送信されると、HTMLコード内のイメージURLはすべて相対URLであり、絶対URLとして解決されません。

イメージURLをウェブページコンテンツ内の絶対パスに変換するにはどうすればよいですか?

これを行うには簡単な方法はありますか?私はすべての相対URLを絶対URLで置き換えるためにHTMLコード上でRegexを実行したくありません。

+1

に(すなわち「http://www.mysite.com/pictures/」)サブドメインをしたいあなただけああ... REGEを実行することができます。 – STW

+0

が正しいの回答の一つですか?もしそうなら、可能性 –

+0

私はHtml AgilityPackを使用しました。下記の私の答えを見てください。私はそれをcとマークしました。正解です。 – ashwnacharya

答えて

2

HtmlAgilityPackというこのシンプルなCodeplexツールが見つかりました。 http://www.codeplex.com/htmlagilitypack

このAPIを使用すると、XMLドキュメントを解析できるようにHtmlを解析できます。 XPathを使用してノードを照会および検索することもできます。

私はこの問題に数回実行した、と私はすべての魔法の杖の方法は、のためにそれをすべて行うためにそこにあると思ういけない画像のURL

HtmlDocument htmlDoc = new HtmlDocument(); 
      htmlDoc.LoadHtml(htmlMessage); 

//This selects all the Image Nodes 
      HtmlNodeCollection hrefNodes = htmlDoc.DocumentNode.SelectNodes("//img"); 

      foreach (HtmlNode node in hrefNodes) 
      { 
       string imgUrl = node.Attributes["src"].Value; 
       node.Attributes["src"].Value = webAppUrl + imgUrl; 
      } 

     StringBuilder sb = new StringBuilder(); 
      StringWriter sw = new StringWriter(sb); 

      htmlDoc.OptionOutputAsXml = false; 
      htmlDoc.Save(sw); 
      htmlMessage = sb.ToString(); 
5

検索するhtml文書の先頭にbase要素を追加してみてください。 href属性では、取得するページのURLを使用する必要があります。

-5

すべての相対URLを絶対URLに置き換えるために、HTMLコードでRegexを実行したくありません。

画像が表示されるのはこれが唯一の方法だからです。むしろ、すべての画像をダウンロードして電子メールに埋め込むでしょうか?

0

を修正するために、次のコードスニペットを使用君は。 HTMLAgilityPackは必要なコンテンツを集約するのに適していますが、自分で解読する必要があります。例えば; 「// IMG」が含まHtmlNodesのリストを取得する次の各号のいずれかを返すことができます:

<img src="http://www.adg2435.com/pictures/pic.jpg"/> //absolute url 
<img src="coolpicture.jpg"/> //relative to the page 
<img src="pictures/pic.jpg"/> 
<img src="./pictures/pic.jpg"/> 

それはリンクの種類が指定されたウェブページ上に表示しようとしている把握するのはあなた次第です。 ます。また、このようなことを考慮する必要があります(拡張子「.JPG」後に画像のURLを切り捨て)

<img src="/pictures/pic.jpg?45823593&xyz=95325235r0634945823ot49140200"/> 

だから、私はそれが便利な、任意の時点で手元にいくつかのことを保つために見つける:

  1. ページ全体
  2. 言うようなことを行うために与えられたURL(ドメイン用の送信元URL「は、与えられたSRCは、ドメインが含まれていますか?「) これは、あなたがソースリンクのドメインを取得する方法を次のとおりです。

    ウリdomainUri =新しいウリ(fullurlをする); domainUrl = domainUri.GetLeftPart(UriPartial.Authority);

  3. 潜在的に、あなたが可能

関連する問題