"подоприте" и поразите вкладку.. гасит свойство для Вас...
Поскольку Mac OS X включает Python, рассмотрите возможность использования сценария Python вместо сценария Bash. Я не тестировал отправляющую часть, но она соответствует стандартному примеру .
# 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()
Надеюсь, это поможет.
Существует программа под названием Sendmail .
Вероятно, вы не захотите использовать команду -bs
, если только вы не отправляете ее как необработанный SMTP, как в примере Мартина. -bs
предназначен для запуска SMTP-сервера в качестве демона. Sendmail будет отправлять прямо на получающий почтовый сервер (на порт 25), если вы не переопределите его в файле конфигурации. Вы можете указать файл конфигурации с помощью параметра -C
.
В конфигурации вы можете указать сервер ретрансляции (любой почтовый сервер или sendmail, выполняющий -bs
на другом компьютере)
Использование правильно настроенного сервера ретрансляции является хорошей идеей, потому что, когда ИТ-отдел управляет почтовыми серверами, они реализуют ключи домена SPF и . Это убережет вашу почту от мусорной корзины. корпоративный брандмауэр, который слушает на порту, отличном от 25.
Я считаю, что вы можете добавить параметры конфигурации в командную строку. Вам нужна опция SMART_HOST. Поэтому вызовите Sendmail, например, sendmail -OSMART_HOST = nameofhost.com
.
1) Почему бы не настроить постфикс
для обработки только исходящей почты и ее ретрансляции через почтовый шлюз? Его самым большим преимуществом является то, что он уже установлен на клиентах OS X.
На самом деле, "почта" тоже работает.
mail -s "subject line" name@address.ext < filename
работает отлично, если на вашем компьютере настроен SMTP. Я думаю, что большинство компьютеров Mac это делают по умолчанию.
Если у вас нет SMTP, то единственное, что вы сможете сделать, это пройти через Mail.app. АЛЬТЕРНАТИВНЫЙ способ пройти через mail.app - через AppleScript . Когда вы указываете Mail.app отправлять почту через AppleScript, вы можете запретить ему открывать какие-либо окна ... (для этого по-прежнему требуется настройка Mail.app).
Введение в создание сценариев почты имеет хороший описание работы с почтой в AppleScript.
Probably the only way you could do this, while keeping the program self-sufficient, is if you have direct access to an SMTP server from the clients.
If you do have direct access to an SMTP server you can use the SMTP example from wikipedia and turn it into something like this:
#!/bin/bash
telnet smtp.example.org 25 <<_EOF
HELO relay.example.org
MAIL FROM:<joe@example.org>
RCPT TO:<jane@example.org>
DATA
From: Joe <joe@example.org>
To: Jane <jane@example.org>
Subject: Hello
Hello, world!
.
QUIT
_EOF
To handle errors I would redirect the output from telnet to a file and then grep that for a "success message" later. I am not sure what format the message should be, but I see something like "250 2.0.0 Ok: queued as D86A226C574" in the output from my SMTP server. This would make me grep for "^250.*queued as".
Вот простой Ruby скрипт для этого. Ruby поставляется с упомянутыми вами версиями Mac OS X.
Замените все биты, помеченные как «заменить». В случае неудачи он возвращает ненулевой код выхода и обратную трассировку Ruby.
require 'net/smtp'
SMTPHOST = 'replace.yoursmtpserver.example.com'
FROM = '"Your Email" <youremail@replace.example.com>'
def send(to, subject, message)
body = <<EOF
From: #{FROM}
To: #{to}
Subject: #{subject}
#{message}
EOF
Net::SMTP.start(SMTPHOST) do |smtp|
smtp.send_message body, FROM, to
end
end
send('someemail@replace.example.com', 'testing', 'This is a message!')
Вы можете встроить это в сценарий Bash следующим образом:
ruby << EOF
... script here ...
EOF
О других способах отправки электронных писем Ruby см. Вопрос о переполнении стека ] Как мне отправить почту из программы Ruby? .
Вы также можете использовать другие языки, которые поставляются с Mac OS X:
Вот модифицированный фрагмент сценария оболочки, который я использовал в различных системах UNIX ...
(echo "$ {MESSAGE}" | $ {uuencode} $ {ATTACHMENT}
$ basename $ {ATTACHMENT} ) | $ {mailx} -s "$ {SUBJECT}" "$ {TO_LIST}"
uuencode и mailx установлены на исполняемые файлы. Другие переменные взяты из пользовательского ввода, проанализированного с помощью getopts.
Это действительно работает, но я должен признать, что чаще всего я использую простую программу Java для отправки сообщений электронной почты с консоли.
sendmail
и даже postfix
может быть слишком большим для установки, если все, что вы хотите сделать, это отправить несколько писем из ваших скриптов.
Если у вас есть аккаунт Gmail, например, вы можете использовать серверы Google для отправки писем, используя SMTP. Если Вы не хотите использовать сервер gGoogle, до тех пор, пока у Вас есть доступ к какому-либо SMTP-серверу, он должен работать.
Очень легкая программа, которая делает это легким, это msmtp. У них есть примеры конфигурационных файлов в документации .
Самым простым способом сделать это было бы установить общесистемное значение по умолчанию:
account default
host smtp.gmail.com
from john.doe@gmail.com
user john.doe@gmail.com
password XXX
port 587
msmtp
должно быть очень легко установить. На самом деле, для него есть порт , так что он может быть так же прост, как порт для установки msmtp
.
После установки и настройки msmtp
, вы можете отправить сообщение по электронной почте на john.doe@gmail.com
, используя:
mail -s <subject> john.doe@gmail.com <<EOF
<mail text, as many lines as you want. Shell variables will be expanded>.
EOF
Вы можете поместить вышеприведенное в скрипт. Подробности см. в man mail
.
sendEmail - это скрипт, который можно использовать для отправки электронной почты из командной строки, используя более сложные настройки, в том числе подключение к удаленному серверу smtp: http://caspian.dotconf.net/menu/Software/SendEmail/
На OSX его легко установить через макропорты: http://sendemail.darwinports.com/
Ниже страница справки по команде, обратите внимание на -s, -xu, -xp флаги:
Synopsis: sendEmail -f ADDRESS [options]
Required:
-f ADDRESS from (sender) email address
* At least one recipient required via -t, -cc, or -bcc
* Message body required via -m, STDIN, or -o message-file=FILE
Common:
-t ADDRESS [ADDR ...] to email address(es)
-u SUBJECT message subject
-m MESSAGE message body
-s SERVER[:PORT] smtp mail relay, default is localhost:25
Optional:
-a FILE [FILE ...] file attachment(s)
-cc ADDRESS [ADDR ...] cc email address(es)
-bcc ADDRESS [ADDR ...] bcc email address(es)
Paranormal:
-xu USERNAME authentication user (for SMTP authentication)
-xp PASSWORD authentication password (for SMTP authentication)
-l LOGFILE log to the specified file
-v verbosity, use multiple times for greater effect
-q be quiet (no stdout output)
-o NAME=VALUE see extended help topic "misc" for details
Help:
--help TOPIC The following extended help topics are available:
addressing explain addressing and related options
message explain message body input and related options
misc explain -xu, -xp, and others
networking explain -s, etc
output explain logging and other output options