Senden von E-Mails von einem Bash-Shell-Skript
Schreibe ich ein Bash shell-Skript für Mac, sendet eine E-Mail-Benachrichtigung mit der Eröffnung eines automator-Anwendung, die sendet E-Mail mit dem Standard E-mail-Konto in Mail.app. Die automator-Anwendung legt auch eine text-Datei, die das Skript geschrieben hat. Die Probleme dieser Lösung sind die
- Es ist sichtbar in der GUI beim senden
- Es Stiehlt den Fokus, wenn E-Mail nicht die aktuelle Anwendung
- Es ist abhängig von E-Mail.app-Konto-setup wird in der Zukunft gültig
Ich-Figur zu bekommen, um diese Mängel sollte ich die E-mail senden direkt aus dem Skript durch Eingabe SMTP Einstellungen, eine Adresse zu senden, etc. direkt in das Skript. Der Haken ist, möchte ich zur Bereitstellung dieses Skript auf mehreren Computern (10.5 und 10.6), ohne dass Postfix auf dem computer. Ist es möglich dies in das Skript, so läuft es auf ein base-Mac OS X-Installation von 10.5. und 10.6?
Update: ich habe festgestellt, das -bs
option für Sendmail scheint das zu sein, was ich brauche, aber ich bin an einem Verlust, wie Sie die Einstellungen festlegen.
Auch, zu klären, den Grund dafür möchte ich angeben der SMTP-Einstellungen ist, dass mails von localhost auf port 25 gesendet via Postfix blockiert werden würde von den meisten Firmen-firewalls, aber wenn ich den server angeben und einen alternativen port werde ich nicht laufen in dieses problem.
InformationsquelleAutor der Frage ridogi | 2009-11-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da die Mac OS X enthält Python, verwenden Sie ein Python-Skript anstelle der Bash-Skript. Habe ich noch nicht getestet der sendende Teil, aber es folgt die standard-Beispiel.
Python-Skript
Ich hoffe, das hilft.
InformationsquelleAutor der Antwort Jason R. Coombs
Eigentlich "mail" funktioniert genauso gut.
funktioniert perfekt in Ordnung, so lange, wie Sie über SMTP einrichten auf Ihrem Rechner. Ich denke, dass die meisten Macs tun, standardmäßig.
Wenn Sie nicht über SMTP, dann ist die einzige Sache, die Sie gehen, um in der Lage zu tun ist, gehen durch E-Mail.app. Ein ALTERNATIVER Weg zu gehen, durch E-mail.app ist über AppleScript. Wenn Sie sagen E-Mail.app um E-mail senden mithilfe von AppleScript können Sie sagen, es keine pop-up jede windows... (das tut immer noch erfordern eine Mail.app konfiguriert werden).
Einführung in die Scripting-Mail hat eine gute Beschreibung davon, wie die Arbeit mit E-mail in AppleScript.
InformationsquelleAutor der Antwort Brian Postow
Gibt es ein Programm namens Sendmail.
Sie wahrscheinlich nicht wollen, verwenden Sie die
-bs
Befehl, es sei denn, Sie senden es als raw SMTP wie Martins Beispiel.-bs
ist für die Ausführung eines SMTP-Servers als deamon. Sendmail sendet direkt an den empfangenden mail-server (auf port 25), es sei denn, Sie überschreiben Sie es in der Konfigurationsdatei. Sie können die Konfigurationsdatei durch die-C
Parameter.In der Konfiguration können Sie angeben, einen relay-server (alle E-mail-server oder sendmail laufen
-bs
auf einem anderen Rechner)Mit einem korrekt konfigurierten relay-server ist eine gute Idee, weil wenn ES verwaltet den E-mail Server, die Sie implementieren SPF und domain keys. Das hält den E-mail aus dem junk bin.
Wenn port 25 blockiert ist, Sie sind Links mit zwei Optionen.
sendmail -bd
auf eine Maschine außerhalb derdie Unternehmens-firewall, die überwacht,
auf einem anderen port als 25.
Ich glaube, Sie können hinzufügen die Konfiguration von Parametern auf der Befehlszeile. Was Sie wollen, ist die SMART_HOST option. So rufen Sie Sendmail wie
sendmail -OSMART_HOST=nameofhost.com
.InformationsquelleAutor der Antwort Byron Whitlock
Wahrscheinlich der einzige Weg, Sie könnte dies tun, während das Programm selbst genügt, ist wenn Sie haben einen direkten Zugang zu einem SMTP-server von den clients.
Wenn Sie haben direkten Zugang zu einem SMTP-server, den Sie verwenden können, die SMTP-Beispiel von wikipedia und verwandelt es in etwas so:
Fehler zu behandeln würde ich leite die Ausgabe von telnet, um eine Datei und dann grep dass für eine "Erfolgsmeldung" weiter unten. Ich bin mir nicht sicher welches format sollte die Botschaft sein, aber ich sehe so etwas wie "250 2.0.0 Ok: queued as D86A226C574" in der Ausgabe von meinem SMTP-server. Dies würde mich grep für "^250.*in der Warteschlange".
InformationsquelleAutor der Antwort Martin Olsen
sendEmail ist ein Skript, das Sie verwenden können, um E-Mail senden von der Befehlszeile aus mithilfe komplizierter Einstellungen, einschließlich der Verbindung zu einem remote-smtp-server:
http://caspian.dotconf.net/menu/Software/SendEmail/
Unter OSX ist es leicht installierbar via macports:
http://sendemail.darwinports.com/
Unten ist die Hilfe-Seite für den Befehl, zur Kenntnis nehmen, der-s, -xu, -xp-flags:
InformationsquelleAutor der Antwort Mark Carey
E-mail senden von der Bash mit einer Zeile:
InformationsquelleAutor der Antwort Olivier
Hier ist eine einfache Rubin Skript, dies zu tun. Ruby Schiffe auf dem Mac OS X-Versionen, die Sie erwähnt.
Ersetzen alle bits markiert mit 'ersetzen'. Wenn es fehlschlägt, es gibt einen nicht-null exit-code und Ruby-backtrace.
Binden Sie diese in ein Bash-Skript etwa so:
Einige andere Möglichkeiten zum senden von Ruby-E-Mails, siehe Stack Overflow Frage Wie sende ich E-Mails von einem Ruby-Programm?.
Können Sie andere Sprachen, die im Lieferumfang von Mac OS X:
InformationsquelleAutor der Antwort docwhat
Ich peitschte diese bis für die Herausforderung. Wenn Sie entfernen Sie den Aufruf von 'Graben' erhalten Sie die E-mail-relay, es ist eine 100% native Bash-Skript.
InformationsquelleAutor der Antwort Orwellophile
1) Warum nicht konfigurieren
postfix
zu verarbeiten ausgehender E-mail nur und leiten Sie über ein mail-gateway? Sein größter Vorteil ist, dass es bereits installiert auf OS-X-clients.2) Installieren und konfigurieren Sie die leichte MTAs behandeln nur ausgehende E-Mails, wie
nullmailer
oderssmtp
(via MacPorts).In beiden Fällen verwenden Sie
mailx(1)
(odermutt
wenn Sie wollen, bekommen Lust) zum senden der mails von einem shell-Skript.Gibt es mehrere Fragen, die auf Server-Fehler, ins Detail zu gehen.
InformationsquelleAutor der Antwort hop
sendmail
und sogarpostfix
möglicherweise zu groß, um zu installieren, wenn alles, was Sie tun möchten, ist zu senden ein paar E-Mails aus Ihren Scripten.Wenn Sie eine Google Mail Konto können Sie beispielsweise verwenden Sie die Google-Server zum senden von E-Mails mit SMTP. Wenn Sie nicht möchten, zu verwenden gGoogle - server, solange Sie Zugriff auf einige SMTP-server haben, sollte es funktionieren.
Sehr leichtes Programm, das es einfach zu tun, ist msmtp. Sie haben Beispiele für Konfigurationsdateien in Ihrer Dokumentation.
Der einfachste Weg, es zu tun wäre, um ein system-wide default:
msmtp
sollte sehr einfach zu installieren. In der Tat, es ist ein port für die es, so könnte es sein, so einfach wieport install msmtp
.Nach der Installation und Konfiguration
msmtp
können Sie sich per E-Mail an[email protected]
mit:Können Sie setzen, die weiter oben in einem Skript. Sehen
man mail
für details.InformationsquelleAutor der Antwort Alok Singhal
Hier ist eine modifizierte shells, Skript, Schnitt ich verwendet habe, auf verschiedenen UNIX-Systemen...
(echo "${MESSAGE}" | ${uuencode} ${ATTACHMENT}
$basename ${ATTACHMENT}) | ${mailx} -s "${SUBJECT}" "${TO_LIST}"
uuencode und mailx festgelegt sind, um die ausführbaren Dateien. Die anderen Variablen aus Benutzereingaben analysiert mit getopts.
Dies funktioniert auch, aber ich muss zugeben, mehr als oft nicht, ich benutze ein einfaches Java-Programm zum senden der Konsole E-Mails.
InformationsquelleAutor der Antwort tmeisenh
Versuchen mtcmail. Das ist eine ziemlich vollständige E-Mail-Absender, komplett standalone.
InformationsquelleAutor der Antwort motobói