Progress4GL中UNIX SILENT VALUE调用mail命令使用变量失败求助
解决Progress4GL中使用变量作为mail命令收件人的问题
问题分析
你遇到的报错Send options without primary recipient specified,本质是mail命令没接收到有效的收件人参数,两种写法各自存在问题:
第一种写法:字符串拼接缺少空格
原代码里的字符串结尾是"New UI Report <noreply@rentokil-initial.com>"',直接拼接vEmailAdress后,最终生成的命令会变成:echo "Please see attached report" | mail -s "Test email message" -a /tmp/newuireport.csv -r "New UI Report <noreply@rentokil-initial.com>"xyz.com邮箱地址
xyz.com和前面的-r参数值连在了一起,mail命令无法识别这是一个独立的收件人参数。第二种写法:单引号字符串未解析变量
Progress4GL不会解析单引号包裹的字符串里的变量名,所以mail命令收到的收件人参数是字面量vEmailAdress,而非变量存储的实际邮箱地址,自然找不到有效收件人。
解决方案
只需要在拼接变量前添加一个空格,让邮箱地址成为独立的参数即可,修正后的代码如下:
UNIX SILENT VALUE('echo "Please see attached report" | mail -s "Test email message" -a /tmp/newuireport.csv -r "New UI Report <noreply@rentokil-initial.com>" ' + vEmailAdress).
如果想让代码更易读和调试,可以先把完整的命令字符串存入一个变量,再执行:
DEFINE VARIABLE cFullMailCmd AS CHARACTER NO-UNDO. cFullMailCmd = 'echo "Please see attached report" | mail -s "Test email message" -a /tmp/newuireport.csv -r "New UI Report <noreply@rentokil-initial.com>" ' + vEmailAdress. UNIX SILENT VALUE(cFullMailCmd).
额外提示
注意你的变量名拼写:vEmailAdress少了一个字母d,正确的拼写应该是vEmailAddress,虽然不影响当前功能,但规范命名能避免后续维护时的混淆。
内容的提问来源于stack exchange,提问作者rahul mukherjee
相关产品推荐
相关产品推荐

