このリンクに記載されているように、従来の ASP を使用してサイト全体にメールを送信するmailgun API メソッドを実装しました。しかし、件名/text/htmlbody で「&」記号を送信しようとすると、「&」記号の後のテキストがメールで送信されません。
例: 件名を「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 "[email protected]", "No Reply [email protected]", "A&B Traders", "A&B Traders Welcomes You", ""
それぞれの値が渡されるSendMailAsync()
ように関数を変更しますServer.UrlEncode()
。たとえば、 の場合はsubject
、次のように変更します。
httpPostData = httpPostData & "&subject=" & Server.UrlEncode(subject)
そうすれば、URL が送信されると、subject
クエリ文字列パラメーターは次のようになります。
&subject=A%26B%20Traders
自分でアプローチをテストしたい場合は、URL Decoder/Encoder のようなオンライン URL デコード/エンコード ページを使用できます。
Http リクエストを介して手動でデータを送信する場合は常に、すべてのパラメータを URL エンコードして?
、&
などの特殊文字との競合などが発生しないようにする必要があります。標準フォームを送信すると、インターネット ブラウザはプロセスの一部としてこれを実行します。そのため、手動リクエストを送信するときになぜそれが必要なのかを理解していない人がいるかもしれません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加