【问题标题】:Use Applescript to send mail without mail.app使用 Applescript 发送邮件,无需 mail.app
【发布时间】:2017-01-29 07:19:41
【问题描述】:

我是 Applescript 的新手,正在开发一个在后台运行的应用程序,我希望它在没有 mail.app 的情况下每隔一段时间发送电子邮件更新。

我已经多次尝试用谷歌搜索,虽然this 是我找到的最接近的,但我不知道如何使用 Python 脚本。无论安装在什么 Mac OSX 中,包括没有 Python 的计算机,这个应用程序都需要工作。这可能吗?

【问题讨论】:

    标签: email applescript


    【解决方案1】:

    我经常想做同样的事情并且自己也很挣扎。我最终选择了 python 选项。 Python 支持回 OS X 10.5 并预装在许多较新版本的 OS X 上。是否有某些原因您觉得不能使用它?您是否支持 OS 10.4.x 或更旧的机器?

    如果他们的 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
    

    这是 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()
    

    【讨论】:

    • 好的,所以我尝试了这个,但是当我运行脚本时我得到“假”。有没有办法可以看到错误发生的位置?我更改了 smtp 服务器(更改为 smtp.gmail.com),提供了电子邮件地址的密码,并更改了脚本前半部分的相应部分。我错过了什么?非常感谢您的帮助! @ThrowBackDewd
    【解决方案2】:

    在终端中运行

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

    注意:这假设您有本地安装的 MTA

    您的 AppleScript 将是:

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

    【讨论】:

      【解决方案3】:

      对python一无所知,我使用了TextWrangler并剪切并粘贴了上面的两个脚本。 第二个在第1行崩溃,返回语法错误,如下:

      第 1 行 属性 PyMail : "/Users/.../PyMail.py" -- Python 邮件脚本的路径 ^ SyntaxError: 无效语法

      胡萝卜指针位于“PyMail”中的“l”下方。 我注释掉了第 1 行,它为第 3 行返回了相同的消息。

      【讨论】:

      • 这是一个问题还是一个答案?
      猜你喜欢
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多