如何强制 s-nail 附件进行 base64 编码?

如何强制 s-nail 附件进行 base64 编码?

我的工作是获取 CSV 文件并通过外部邮件服务发送它们。一切似乎都很好,但有一个例外:我发现 Windows 样式的 CRLF CSV 文件在该过程中被破坏,当我在邮件客户端中打开它们时,它们在每行末尾都有 3 个 0x0A 字符。

我认为强制对文件进行 Base64 编码很容易,但尽管从可编程性的角度来看,s-nail 应该是一辆法拉利,但我找不到油门踏板。通过使用 mime 设置,我可以更改内容类型,但无法将有效负载转换为 Base 64。

echo "CSV files attached:" | s-nail -vv -Smimetypes-load-control -X'mimetype "application/octet-stream csv"'  -r [email protected] -s "Your CSV file" -a /data/review/fun.csv  -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user="[email protected]" -S smtp-auth-password="yourmom" -S smtp="corgibutts.com:587" "[email protected]"

有谁知道如何实现这一点?

答案1

我发现 mac/unix 行尾没有被破坏,并且已经切换到那些可以接受它的人。

作者将其发布到他的邮件列表中来回答我的问题,该补丁应该在大约 3 个月后广泛发布:

我今天已经实现了这样的事情,但它需要 v14.10 (希望圣诞节前后)。

可以通过添加前缀 ! 来强制执行 base64字符集规范:

-a file[=[!]input-charset[#[!]output-charset]], --attach=..(发送模式)附加文件,受波形符扩展影响(请参阅文件名转换和文件夹)。在撰写模式下,COMMAND ESCAPES ~@,尤其是可编写脚本的 ~^ 提供了附加文件的替代方法。

如果文件不可访问但包含等号 = 字符集规范将被拆分。如果仅给出一个输入,则它是固定的并且不应用转换;空或特殊字符串连字符减号 - 表示 ttycharset。如果给出输出,则转换是即时执行的,不考虑文件类型或内容;但是,空字符串或连字符减号 - 强制执行默认字符集转换(-a file、-a file=# 和 -a file=-#- 相同),稍后在 MIME- 分类文件(HTML 邮件和 MIME)之后应用附件,mime.types 文件)。如果没有 ,+iconv,则在功能中仅此模式可用。字符集名称可以以感叹号“!”为前缀强制附件的 base64 mime 编码。

他的邮件列表中有对话,我还没有看到他的最新回复,但最终应该在 base64 编码线程下找到它:

https://lists.sdaoden.eu/pipermail/s-mailx/2022-September/thread.html

相关内容