You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Progress 4GL集成SendGrid API实现邮件功能报错求助

修复Progress 4GL集成SendGrid API的代码问题

问题原因分析

你遇到的错误来自三个核心问题:

  • 错误使用SERVER对象(该对象用于连接Progress AppServer,而非发送HTTP请求)
  • JSON字符串的双引号转义不符合Progress 4GL语法
  • SendGrid API的认证方式和请求头设置错误

修复后的代码

DEFINE VARIABLE oHttpClient AS HttpClient NO-UNDO.
DEFINE VARIABLE cUrl AS CHARACTER NO-UNDO.
DEFINE VARIABLE cRequestPayload AS LONGCHAR NO-UNDO.
DEFINE VARIABLE cResponse AS LONGCHAR NO-UNDO.
DEFINE VARIABLE iStatusCode AS INTEGER NO-UNDO.
DEFINE VARIABLE cErrorMsg AS CHARACTER NO-UNDO.

/* 设置SendGrid API地址 */
cUrl = "https://api.sendgrid.com/v3/mail/send".

/* 正确转义JSON字符串中的双引号(Progress用""转义) */
cRequestPayload = '{ ""personalizations"": [ { ""to"": [ { ""email"": ""adXX@gmail.com"" } ] } ], 
                    ""from"": { ""email"": ""jaXXX@gmail.com"" }, 
                    ""subject"": ""Hello, World!"", 
                    ""content"": [ { ""type"": ""text/plain"", ""value"": ""Heya!"" } ] }'.  

/* 创建HttpClient实例(用于HTTP请求) */
CREATE oHttpClient.

/* 添加SendGrid所需的请求头:Bearer认证和Content-Type */
oHttpClient:SET-REQUEST-HEADER("Authorization", "Bearer SG.SEND_GRID_API_KEY").
oHttpClient:SET-REQUEST-HEADER("Content-Type", "application/json").

/* 发送POST请求 */
oHttpClient:POST(cUrl, cRequestPayload, cResponse, iStatusCode, cErrorMsg).

/* 处理响应 */
IF iStatusCode = 202 THEN DO:
    MESSAGE "邮件发送成功!" VIEW-AS ALERT-BOX INFO BUTTONS OK.
END.
ELSE DO:
    MESSAGE "发送失败,状态码:" iStatusCode "错误信息:" cErrorMsg VIEW-AS ALERT-BOX ERROR BUTTONS OK.
END.

/* 清理资源 */
IF VALID-HANDLE(oHttpClient) THEN DELETE OBJECT oHttpClient.

关键修改说明

  • 替换SERVER为HttpClient:HttpClient是Progress专门用于发送HTTP请求的类,替代原来错误的SERVER对象。
  • 修正JSON转义:Progress 4GL中字符串内的双引号必须用两个连续双引号""转义,而非HTML实体",否则会被解析为语法错误。
  • 正确设置认证方式:SendGrid V3 API使用Bearer Token认证,将API Key放在Authorization请求头中,格式为Bearer YOUR_API_KEY,而非Basic认证。
  • 添加Content-Type头:发送JSON格式的请求体必须设置Content-Type: application/json,否则API无法正确解析请求。

额外建议

  • 确保你的SendGrid API Key拥有mail.send权限,否则会返回权限错误。
  • 可以将API Key存储在配置文件中,而非硬编码在代码里,提升安全性。
  • 处理更多HTTP状态码,比如401(权限错误)、400(请求格式错误)等,以便更精准排查问题。

内容的提问来源于stack exchange,提问作者jahnavi guggilla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 08:43:22