简体   繁体   English

使用Applescript发送不带mail.app的邮件

[英]Use Applescript to send mail without mail.app

I'm new to Applescript and working on an app that runs in the background, and I want it to send email updates every so often WITHOUT mail.app. 我是Applescript的新手,正在开发一个在后台运行的应用程序,我希望它经常发送电子邮件更新,而无需mail.app。

I've tried googling this numerous times, and while this is the closest I've found, I don't know how to use a Python script. 我已经尝试了很多次谷歌搜索,尽管是我找到的最接近的搜索,但我不知道如何使用Python脚本。 This app needs to work no matter what Mac OSX it is installed in, including Computers without Python. 无论安装在哪个Mac OSX上(包括不带Python的计算机),此应用都需要正常工作。 Is that possible? 那可能吗?

I have often wanted to do the same thing and struggled myself. 我经常想做同样的事情,挣扎着挣扎。 I ultimately landed on a python option. 我最终找到了python选项。 Python is supported back to OS X 10.5 and comes preinstalled on many of the newer versions of OS X. Is there some reason you don't feel you can use it? OS X 10.5再次支持Python,并且在许多较新的OS X版本中预装了Python。是否由于某些原因您不觉得可以使用它? Are you supporting OS 10.4.x or older machines? 您是否支持OS 10.4.x或更旧的计算机?

If they python option is still a possible option, I've included an example of how to use it here. 如果它们仍然是python选项,那么我在此处提供了如何使用它的示例。

property PyMail : "/Users/TBD/Documents/Sample_Python_Email/PyMail.py"                      -- PATH TO PYTHON MAIL SCRIPT

on run
    set emailTo to "youraddress@somedomain.com" -- MULTIPLE ADDRESS SHOULD BE A COMMA     DELIMITED STRING LIKE THIS -- "address1@gmail.com, address2@hotmail.com"
    set emailFrom to "Your Name <your.name@somedomain.com>"
    set subject to "Demo Email"
    set message to "Hi user,
            I hope things are going well"
    set pathToAttchment to "/Users/TBD/Desktop/prof.jpg" -- POSIX PATH TO FILE, LEAVE AS EMPTY STRING FOR NO ATTACHMENT
    set username to "smtpusername" -- MAY OR MAY NOT BE REQUIRED IN YOUR CASE

    sendPyMail(emailTo, emailFrom, subject, message, pathToAttchment, username)

end run



on sendPyMail(emailTo, emailFrom, subject, message, attachment, username)
    try
        do shell script "python " & quoted form of PyMail & " " & quoted form of emailTo & " " & quoted form of emailFrom & " " & quoted form of subject & " " & quoted form of message & " " & quoted form of attachment & " " & quoted form of username
        return true
    on error
        return false
    end try
end sendPyMail

Here is the python script (just copy and past it into a text editor and save as PyMail.py. You'll need to change the smtp server and possibly add the password that goes with the username you're supplying... 这是python脚本(只需将其复制并粘贴到文本编辑器中,然后另存为PyMail.py。您将需要更改smtp服务器,并可能添加与您提供的用户名一起使用的密码...

import sys

SMTP_TO = sys.argv[1]
SMTP_TO = SMTP_TO.split(',')
SMTP_FROM = sys.argv[2]
SUBJECT = sys.argv[3]

MESSAGE = sys.argv[4]

TEXT_FILENAME = sys.argv[5]

SMTP_USERNAME = sys.argv[6]



SMTP_SERVER = 'smtp.domainx.com'
SMTP_PORT = 25

SMTP_PASSWORD = ''


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

msg = email.MIMEMultipart.MIMEMultipart()
body = email.MIMEText.MIMEText(MESSAGE)

if TEXT_FILENAME != "":
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)

if TEXT_FILENAME != "":
    msg.attach(attachment)

msg.add_header('From', SMTP_FROM)
msg.add_header('To', ';'.join(SMTP_TO))
msg.add_header('Subject', SUBJECT)

mailer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
mailer.sendmail(SMTP_FROM, SMTP_TO, msg.as_string())
mailer.close()

Run this in Terminal 在终端运行

echo "this is the body" | mail -s "this is the subject" "to@address"

Note: This assumes you have a locally installed MTA 注意:这是假设您有本地安装的MTA

Your AppleScript would be: 您的AppleScript为:

do shell script "echo 'this is the body' | mail -s 'this is the subject' 'to@address'"

Knowing nothing about python, I used TextWrangler and cut and paste the two scripts above. 对python一无所知,我使用了TextWrangler并剪切并粘贴了上面的两个脚本。 The second one crashes at line 1, returning a syntax error, as follows: 第二个在第1行崩溃,返回语法错误,如下所示:

line 1 property PyMail : "/Users/.../PyMail.py" -- PATH TO PYTHON MAIL SCRIPT ^ SyntaxError: invalid syntax 第1行的属性PyMail:“ / Users /.../ PyMail.py”-PYTHON邮件脚本的路径^ SyntaxError:语法无效

The carrot pointer is under the 'l' in 'PyMail'. 胡萝卜指针位于“ PyMail”中的“ l”下方。 I commented out line 1, and it returned the same message for line 3. 我注释掉了第1行,并为第3行返回了相同的消息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM