ターミナルからメールを送信するためのMail.appのラッパースクリプトを作成する


2

私はbashとapplescriptを使って端末からメールを送信しようとしています。私は引数とEメールメッセージ本文の世話をするためにbashを使います。それから私はMail.appでメールを送るのにApplescriptを使ってみました。私は私が得る次のことを試みるとき、私はいくつかの問題に遭遇した、しかし 4:4: syntax error: Expected expression but found end of script. (-2741)

#!/bin/bash

if [ $# -ne 2 ]
then
    echo "Arguments: <subject> <recipient>" >&2 #stderr
    exit 1
fi

read message

applescript="
tell application \"Mail\"
    set theMessage to make new outgoing message with properties {visible:true, subject:${1}, content:${message}, address:${2}}
    send theMessage
end tell
"

# send the message
osascript -e ${applescript}

更新版:

#!/bin/bash

if [ $# -ne 2 ]
then
    echo "Arguments: <subject> <recipient>" >&2 #stderr
    exit 1
fi

read message

echo "tell application \"Mail\"
    set theEmail to make new outgoing message with properties {visible:true, subject:\"${1}\", content:\"${message}\"}
    tell theEmail
        make new recipient at end of to recipients with properties {address:\"${2}\"}
        send theEmail
    end tell
end tell" | osascript

回答:


2

あなたもこれをチェックアウトしたいかもしれません スーパーユーザー投稿 。の 受け入れられた答え AppleScriptを利用してTerminalコマンドラインから添付ファイル付きのEメールを送信するbashスクリプトを提供します。このスクリプトは必要以上に機能的かもしれませんが、それは素晴らしい出発点です。答えからのコード:

#!/bin/bash
echo "tell application \"Mail\"
    activate

    set MyEmail to make new outgoing message with properties {visible:true, subject:\"$2\", content:\"Some Message Here\"}
    tell MyEmail
        make new to recipient at end of to recipients with properties {address:\"$1\"}
        make new attachment with properties {file name:((\"$3\" as POSIX file) as alias)}
    end tell
end tell
" | osascript

1
ありがとう。文字列をosascriptにエコーすることでエラーを取り除きました。
foo

2

Mail.appを使用する必要がありますか、それとも単にEメールメッセージを送信することが目的ですか?ターミナルからEメールメッセージを送信するだけの場合は、 メールを送る コマンドラインユーティリティ。

/usr/local/bin/sendemail 
 -f from@my.email.com 
 -t my.recipient@their.email.com 
 -s your.smtp.server:port 
 -xu smtp.username.here 
 -xp smtp.password.here 
 -m message.body.goes.here

明らかにTerminalでは、これらすべてを適切なエスケープと文字列クォーテーションを付けて1行にする必要があります。その他のオプションについてはsendemailのmanページを見てください。


1
ありがとうアッシュ。 sendemailのような他のオプションを考えたことがありますが、ログインの詳細をプレーンテキストで保存するという考えは嫌いです。いくつかのGooglingの後、私は認証にキーチェーンを使用するために利用可能ないくつかのオプションがあることを発見しました、しかし誤設定などの可能性が常にあるのです。それが私が考えたときです、ちょっと私はすでに認証された電子メールクライアントを持っています:私がちょうどそれをスクリプト化することができればMail.app。
foo

良い点、@ foo、私の投稿の中で平文ログインの詳細を述べておくべきだった。それで私も一時停止しました、しかし私は私のスクリプトを使い捨てGmailアカウントを使ってToDo EメールをWunderlistに送るために使っています。そのアカウントが危険にさらされていても構いません。あなたが問題の解決策を見つけたことをうれしく思います。
Ash
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.