2009-07-17 5 views
0

사용자가 버튼 클릭만으로 친구에게 보낼 수있는 웹 페이지가 있습니다. 현재 Chilkat의 MailMan을 사용하고 있지만 간헐적 인 문제가 계속 발생합니다. 그것은 메일을 처음 시도 할 때 occassionaly처럼 보이며 널 포인터 예외를 던집니다. 그런 다음 똑같은 페이지를 다시 시도하면 문제가 없습니다. "친구에게 보내기"를 구현하기위한 구성 요소에 대한 제안 사항이 있습니까?

  • 내가 할 을 시도하고 무엇을 할 것인가가 밖으로 다른 구성 요소가 있습니까?
  • 자신의 경량 구성 요소를 사용하는 것이 더 쉬울까요?
  • 위의 문제를 쉽게 풀면 해결할 수있는 사람이 있습니까? 위의 사항에 대해 걱정할 필요가 있습니까?

편집 :가 어쩌면 내가 뭔가를 정리해야한다. 나는 이메일을 보내는 방법을 안다. 그것은 문제가 아닙니다. 제가 사용하고 있던 칠캇 (Chilkat) 구성 요소는 웹 페이지를 받아서 이메일에 넣어 보낼 수 있습니다. 그 다음 그것을받는 사람은 모든 CSS가 포함 된 이메일과 사진과 모든 것을 이메일에 포함합니다.

답변

1

이것은 실제로 사소한 운동은 아닙니다.

당신이하고 싶은 일은 HTML을 다운로드하는 것입니다 (쉬운 부분입니다). 당신은 다음의 구문을 분석해야하고, CSS는 모든 참조를 추출하고 이미지 참조하고 다음 중 하나를 이메일로

  1. 삽입 그들, 또는

  2. 변환 절대 링크에 대한 모든 링크.

나쁜 HTML을 모두 살펴보면 trival이 아닙니다. 내가 이것을 알고있는 이유는 aspNetEmail (www.aspNetEmail.com)에이 기능을 썼기 때문에 모든 종류의 잘못된 HTML을 설명해야했기 때문입니다.

+0

나는 이것이 아주 깡충이가 될 것이라는 것을 알고있다. 나는 Chilkat에서 널 포인터 예외를 일으키는 것을 알아 내려고 노력하고있다. 나는 너의 제품을 볼 것이다. – uriDium

+0

질문이나 제안 사항이 있으면 알려주십시오. 우리는이 오프리스트를 취할 수 있습니다. 내 웹 사이트를 통해 저에게 연락하십시오. 건배! 데이브 –

0

1) .NET은 System.Net.Mail에서 메일을 보내기에 알맞은 적절한 클래스를 제공합니다.

2) 드물게 발생하고 반복하지 않으면 try 블록에 넣고 실패한 것으로 간주하기 전에 두 번 더 다시 시도하십시오. 원유처럼 느껴지 긴하지만 이는 매우 효과적인 해결책입니다.

+0

나는 그것을 생각했지만 약간의 항문이고 문제를 해결하고 싶습니다. 그러나 나는 중간에 그렇게했습니다. 다시 한번 "친구에게 보내기"할 방법을 찾고 있습니다. – uriDium

+0

System.Net.Mail을 사용하지 못하게하는 주요 문제는 무엇입니까?CSS, 이미지 등을 포함하는 첨부 파일로 완성 된 HTML 페이지를 보내시겠습니까? –

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 = "[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 
} 

대체 할 정규 표현식을 시작할 수있는 많은 리소스가 Google에 있습니다.

관련 문제