2016-08-31 1 views
1

Я отправляю электронное письмо с помощью mailgun. Тело электронной почты - это html-контент, у которого есть URL-адрес с параметрами строки запроса. В полученном письме содержимое разбилось на символ «&» в строке запроса. Я использую vb.net со стандартным httpwebrequest.mailgun разрывает электронную почту в амперсанде в строке запроса (тело электронной почты)

Цените любую помощь здесь.

Вот пример кода:

Try 
     Body = "<br/>Please take a moment to review and sign your payment.</p><p><a href='http://test.com/signme.aspx?ID=xxxxxxxx&ID2=xxxxxx=='>&nbsp;&nbsp;&nbsp;&nbsp;Click here to review and electronically sign the authorization</a></p>" 
     Dim strDataToPost As String = String.Empty 
     Dim myWebRequest As HttpWebRequest 
     Dim myRequestStream As Stream 
     Dim myStreamWriter As StreamWriter 

     Dim myWebResponse As HttpWebResponse 
     Dim myResponseStream As Stream 
     Dim myStreamReader As StreamReader 
     myWebRequest = WebRequest.Create(URL) 
     ' Set the method to "POST" and the content type so the server knows to expect form data in the body of the request. 
     With myWebRequest 
      .Method = "POST" 
      .ContentType = "application/x-www-form-urlencoded" 
     End With 
     myWebRequest.Credentials = New NetworkCredential("api", "mykey") 
     strDataToPost = strDataToPost + "from=" + FromEmail 
     strDataToPost = strDataToPost + "&to=" + ToEmail 
     If Cc.Trim.Length > 0 Then strDataToPost = strDataToPost + "&cc=" + Cc 
     If Bcc.Trim.Length > 0 Then strDataToPost = strDataToPost + "&bcc=" + Bcc 
     strDataToPost = strDataToPost + "&subject=" + Subject 
     strDataToPost = strDataToPost + "&html=" + HttpUtility.HtmlDecode(Body) 

     ' Get a handle on the Stream of data we're sending to the remote server, connect a StreamWriter to it, 
     ' and write our data to the Stream using the StreamWriter. 
     myRequestStream = myWebRequest.GetRequestStream() 
     myStreamWriter = New StreamWriter(myRequestStream) 
     myStreamWriter.Write(strDataToPost) 
     'WriteToLogFile("Data :" & strDataToPost) 
     myStreamWriter.Flush() 
     myStreamWriter.Close() 
     myRequestStream.Close() 

     ' Get the response from the remote server. 
     myWebResponse = myWebRequest.GetResponse() 

     ' Get the server's response status? 
     ' Just like when we sent the data, we'll get a reference to the response Stream, connect a StreamReader to the Stream and 
     ' use the reader to actually read the reply. 
     myResponseStream = myWebResponse.GetResponseStream() 
     myStreamReader = New StreamReader(myResponseStream) 
     Dim strResult As String = myStreamReader.ReadLine() 
     myStreamReader.Close() 
     myResponseStream.Close() 
     myWebResponse.Close() 
    Catch ex As Exception 
     WriteToLogFile("Error Occured:" & ex.Message) 
    End Try 

ответ

0

Try кодирования HTML Ваше сообщение перед отправкой его.

«&» сигнализирует о начале HTML характера

(i.e. "&#36;" = "$") 

Так выглядит, когда браузер видит «&» это захватывает несколько следующих символов за ним и пытается перевести его в HTML символ, который выдает ошибку, потому что «& ID2 = x» не является допустимым символьным кодом html. Чтобы предотвратить это, попробуйте добавить эту строку ниже вашего тела = Строка «текст»

Body = System.Net.WebUtility.HtmlEncode(Body) 

Это будет переводить все HTML специальные символы в вашем теле строки в соответствующие HTML-кодов. Если ваша электронная почта отображается как html, ошибок больше не должно быть. Однако, если есть случай, когда электронная почта должна отображаться или интерпретироваться вашей программой как обычный текст, тогда вам нужно будет отменить процесс, используя HtmlDecode.

+0

привет soohoonigan, спасибо за ответ. Я пробовал HTMLEncode, mailgun возвращался с ошибкой (неверный запрос). – user6780213

Смежные вопросы