Используйте Applescript для отправки почты без mail.app

Я новичок в Applescript и работаю над приложением, которое работает в фоновом режиме, и я хочу, чтобы оно время от времени отправляло обновления по электронной почте БЕЗ mail.app.

Я много раз пытался найти это в Google, и хотя это самое близкое, что я нашел, я не знаю, как использовать скрипт Python. Это приложение должно работать независимо от того, на какой Mac OSX оно установлено, включая компьютеры без Python. Это возможно?


person Vira    schedule 08.08.2014    source источник


Ответы (3)


Я часто хотел сделать то же самое и боролся сам. В конечном итоге я остановился на варианте 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 "[email protected]" -- MULTIPLE ADDRESS SHOULD BE A COMMA     DELIMITED STRING LIKE THIS -- "[email protected], [email protected]"
    set emailFrom to "Your Name <[email protected]>"
    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()
person ThrowBackDewd    schedule 08.08.2014
comment
Итак, я попробовал это, но при запуске скрипта я получаю false. Есть ли способ увидеть, где возникает ошибка? Я изменил smtp-сервер (на smtp.gmail.com), дал пароль для адреса электронной почты и изменил соответствующие части первой половины сценария. Что мне не хватает? И большое спасибо за помощь! @ThrowBackDewd - person Vira; 14.08.2014

Запустите это в Терминале

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'"
person double_j    schedule 08.08.2014

Ничего не зная о python, я использовал TextWrangler и вырезал и вставлял два приведенных выше скрипта. Второй падает в строке 1, возвращая синтаксическую ошибку, как показано ниже:

свойство строки 1 PyMail: "/Users/.../PyMail.py" -- ПУТЬ К ПОЧТОВОМУ СКРИПТУ PYTHON ^ SyntaxError: неверный синтаксис

Указатель-морковь находится под буквой «l» в «PyMail». Я закомментировал строку 1, и он вернул то же сообщение для строки 3.

person Robert Smith    schedule 28.01.2017
comment
Это вопрос или ответ? - person Anantha Raju C; 29.01.2017