我已经实施了 mailgun API方法,使用经典ASP在我的网站上发送电子邮件,如link所述。但是当我们尝试发送'&'主题/ text / html中的符号 '&'之后的文字符号未在电子邮件中发送。
例如:如果我们尝试将主题发送为" A& B Traders"但是使用mailgun API发送的电子邮件会将主题显示为" A"。
由于我们使用&分隔的查询字符串发送参数,因此会出现问题对于mailgun API,有一种方法可以绕过'&'内容中的符号并发送查询字符串值但它应该作为&在电子邮件中。
我搜索了很多,但无法在mailgun API文档中找到任何解决方案。
发送电子邮件的示例代码:
Function SendMailSync(toAddress, fromAddress, subject, body, htmlBody)
Dim httpPostData
Dim mailGunMessageUrl
Const MAILGUN_BASE_URL = "https://api.mailgun.net/v3/{DOMAIN HERE}"
Const MAILGUN_API_KEY = "key-{API_KEY}"
httpPostData = "from=" & fromAddress
httpPostData = httpPostData & "&to=" & toAddress
httpPostData = httpPostData & "&subject=" & subject
httpPostData = httpPostData & "&text=" & body
httpPostData = httpPostData & "&html=" & htmlBody
set http = CreateObject("MSXML2.ServerXMLHTTP.6.0")
mailGunMessageUrl = MAILGUN_BASE_URL & "/messages"
http.Open "POST", mailGunMessageUrl, false, "api", MAILGUN_API_KEY
http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
http.setRequestHeader "Authorization", "Basic AUTH_STRING"
http.Send httpPostdata
If http.status <> 200 Then
Response.Write "An error occurred: " & http.responseText
End If
SendMailSync = http.responseText
Set http = Nothing
End Function
SendMailSync "adam@example.com", "No Reply noreply@example.com", "A&B Traders", "A&B Traders Welcomes You", ""
答案 0 :(得分:1)
修改SendMailAsync()
函数,以便Server.UrlEncode()
传递每个值。例如,使用subject
,只需将其更改为;
httpPostData = httpPostData & "&subject=" & Server.UrlEncode(subject)
这样,当发送URL时,subject
查询字符串参数将如下所示;
&subject=A%26B%20Traders
如果您想自己测试方法,可以使用URL Decoder/Encoder之类的在线URL解码/编码页面。
每当通过Http请求手动发送数据时,您应该对所有参数进行URL编码,这样就不会发生与?
和&
等特殊字符冲突的情况。当您提交标准表单时,Internet浏览器会将其作为其过程的一部分,这就是为什么有些人可能不熟悉发送手动请求时需要它的原因。