如何在PeopleCode中规整SendMail()输出的邮件等宽对齐布局?
解决PeopleCode邮件内容等宽对齐问题
你之前用补短横线的方式没效果,核心原因是普通邮件字体是比例宽度字体(比如宋体、Arial),不同字符的宽度不一样(比如"l"和"m"占的宽度差很多),就算字符数凑够了,视觉上还是没法对齐。给你两个靠谱的解决办法:
方法1:用HTML表格布局(最稳妥,邮件兼容性拉满)
邮件客户端对HTML表格的支持普遍很好,把要对齐的内容放进表格里,列的宽度和对齐方式完全可控,根本不会乱。
在PeopleCode里构造HTML格式的邮件内容,示例代码:
// 初始化HTML表格结构 &emailContent = "<html><body><table border='0' cellpadding='3' cellspacing='0'>"; // 表头 &emailContent = &emailContent | "<tr><td style='font-weight:bold; text-align:left;'>流程类型</td><td style='font-weight:bold; text-align:left;'>错误详情</td></tr>"; // 错误数据行 &emailContent = &emailContent | "<tr><td style='text-align:left;'>" | &strPrcsTyp | "</td><td style='text-align:left;'>" | &errorMessage | "</td></tr>"; // 关闭表格和HTML标签 &emailContent = &emailContent | "</table></body></html>"; // 设置邮件为HTML格式 &mail.ContentType = "text/html"; &mail.Text = &emailContent;
如果需要固定列宽,直接给<td>加width="150"这种属性就行,比如<td width="150" style='text-align:left;'>。
方法2:用等宽字体(纯文本风格可选)
如果想保留纯文本的排版感,可以用等宽字体(比如Courier、Consolas),这类字体每个字符宽度完全一致。可以用HTML的<pre>标签包裹内容,或者直接指定字体样式:
示例代码:
// 用<pre>标签自动套用等宽字体 &emailContent = "<html><body><pre style='font-family: Courier, monospace; margin:0;'>"; // 拼接对齐后的内容,现在补短横线/空格就能精准对齐 &emailContent = &emailContent | "流程类型--------------------- 错误详情" | Chr(10); &emailContent = &emailContent | &strPrcsTyp | Rept("-", 21 - Len(&strPrcsTyp)) | " " | &errorMessage | Chr(10); // 关闭标签 &emailContent = &emailContent | "</pre></body></html>"; &mail.ContentType = "text/html"; &mail.Text = &emailContent;
优先推荐方法1,因为表格布局在各种邮件客户端(包括Outlook、Gmail)里都不会出问题,方法2适合喜欢纯文本风格的场景,但要注意部分小众邮件客户端可能对字体支持有限。
内容的提问来源于stack exchange,提问作者Ashley
相关产品推荐
相关产品推荐

