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
相关产品推荐
相关产品推荐

