macos - 从 Bash shell 脚本发送邮件

标签 macos bash email shell

我正在写一个 Bash Mac 的 shell 脚本,它通过打开一个自动应用程序来发送电子邮件通知,该应用程序使用 Mail.app 中的默认邮件帐户发送电子邮件。自动化应用程序还附加了脚本已写入的文本文件。这个解决方案的问题是

  1. 发送时在GUI中可见
  2. 如果 Mail 不是当前应用程序,它会窃取焦点
  3. 这取决于 Mail.app 的帐户设置在未来是否有效

我认为要克服这些缺点,我应该通过输入 SMTP 直接从脚本发送邮件直接在脚本中设置、发送地址等。问题是我想在多台计算机(10.5 和 10.6)上部署此脚本而不启用 Postfix在电脑上面。是否可以在脚本中执行此操作,以便它可以在 10.5 的基本 Mac OS X 安装上运行。和 10.6?

更新:我找到了 Sendmail 的 -bs 选项,这似乎是我需要的,但我不知道如何指定设置。

此外,要澄清的是,我想指定 SMTP 设置的原因是,通过 Postfix 从端口 25 上的本地主机发送的邮件会被大多数公司防火墙阻止,但如果我指定服务器和备用端口,我就赢了遇到那个问题。

最佳答案

由于 Mac OS X 包含 Python,请考虑使用 Python 脚本而不是 Bash 脚本。我没有测试发送部分,但它遵循 standard example .

Python脚本

# Settings

SMTP_SERVER = 'mail.myisp.com'
SMTP_PORT = 25
SMTP_USERNAME = 'myusername'
SMTP_PASSWORD = '$uper$ecret'
SMTP_FROM = 'sender@example.com'
SMTP_TO = 'recipient@example.com'

TEXT_FILENAME = '/script/output/my_attachment.txt'
MESSAGE = """This is the message
to be sent to the client.
"""

# Now construct the message
import smtplib, email
from email import encoders
import os

msg = email.MIMEMultipart.MIMEMultipart()
body = email.MIMEText.MIMEText(MESSAGE)
attachment = email.MIMEBase.MIMEBase('text', 'plain')
attachment.set_payload(open(TEXT_FILENAME).read())
attachment.add_header('Content-Disposition', 'attachment', filename=os.path.basename(TEXT_FILENAME))
encoders.encode_base64(attachment)
msg.attach(body)
msg.attach(attachment)
msg.add_header('From', SMTP_FROM)
msg.add_header('To', SMTP_TO)

# Now send the message
mailer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
# EDIT: mailer is already connected
# mailer.connect()
mailer.login(SMTP_USERNAME, SMTP_PASSWORD)
mailer.sendmail(SMTP_FROM, [SMTP_TO], msg.as_string())
mailer.close()

希望对您有所帮助。

关于macos - 从 Bash shell 脚本发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1822425/

相关文章:

macos - 将 Cocoa 实用程序应用程序拆分为辅助二进制文件 + 主应用程序二进制文件的优点和缺点?

python - Torch7 Mac安装报错

macos - 无法使用 nfs 挂载 vagrant 同步文件夹

regex - 在 linux 目录中查找与模式匹配的文件数

java - MAC OSX-Write Xcode .Dylib 用于 JNA (Java Native Access) -JAVA

ruby - 在 bash : no such file or directory 中安装 rvm 结果

bash - 将十六进制转换为二进制并通过网络发送

.net - .NET 组件访问电子邮件收件箱的建议

email - 如何格式化jenkins构建服务器电子邮件,以使内容不在同一行上?

java邮件API异常