如何发送'&'使用mailgun API在电子邮件主题/ html正文中的符号?

时间:2017-03-31 13:16:42

标签: email vbscript asp-classic html-email mailgun

我已经实施了 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", ""

1 个答案:

答案 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浏览器会将其作为其过程的一部分,这就是为什么有些人可能不熟悉发送手动请求时需要它的原因。

有用的链接