การสร้างสคริปต์ wrapper สำหรับ Mail.app เพื่อส่งจดหมายจาก Terminal


2

ฉันกำลังพยายามส่งอีเมลจากเทอร์มินัลด้วยความช่วยเหลือของ bash และ applescript ฉันใช้ทุบตีเพื่อดูแลข้อโต้แย้งและเนื้อหาข้อความอีเมล จากนั้นฉันได้ลองใช้ Applescript เพื่อส่งเมลด้วย Mail.app ฉันพบปัญหาบางอย่างเมื่อฉันลองทำสิ่งต่อไปนี้ 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

คุณอาจต้องการตรวจสอบสิ่งนี้ โพสต์ SuperUser . คำตอบที่ยอมรับ จัดเตรียมสคริปต์ทุบตีที่ใช้ AppleScript เพื่อส่งอีเมลพร้อมไฟล์แนบจากบรรทัดคำสั่ง Terminal สคริปต์นี้อาจใช้งานได้มากกว่าที่คุณต้องการ แต่มันเป็นจุดเริ่มต้นที่ดี รหัสจากคำตอบ:

#!/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 หรือเป้าหมายของคุณเพียงแค่ส่งข้อความอีเมลหรือไม่ หากเพียงเพื่อส่งข้อความอีเมลจากเทอร์มินัลคุณสามารถใช้ ส่งอีเมล โปรแกรมอรรถประโยชน์บรรทัดคำสั่ง

/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

เห็นได้ชัดว่าในเทอร์มินัลสิ่งเหล่านี้จะต้องดำเนินการในบรรทัดเดียวพร้อมกับการหลีกเลี่ยงที่เหมาะสมและการอ้างอิงสตริง คุณสามารถดูข้อมูลเพิ่มเติมได้ที่ man page ของ sendemail


1
ขอบคุณแอช ฉันคิดถึงตัวเลือกอื่น ๆ เช่น sendemail แต่ไม่ชอบแนวคิดของการจัดเก็บรายละเอียดการเข้าสู่ระบบเป็นข้อความธรรมดา หลังจาก Googling ฉันพบว่ามีตัวเลือกบางอย่างที่สามารถใช้พวงกุญแจเพื่อตรวจสอบ แต่มีโอกาสในการกำหนดค่าผิดพลาดอยู่เสมอ นั่นคือเมื่อฉันคิดว่าฉันมีไคลเอนต์อีเมลที่ผ่านการรับรองความถูกต้องแล้ว: Mail.app ถ้าฉันสามารถสคริปต์ได้
foo

จุดดี @foo ฉันควรได้กล่าวถึงรายละเอียดการเข้าสู่ระบบ cleartext ในโพสต์ของฉัน นั่นก็ทำให้ฉันหยุดเช่นกัน แต่ฉันใช้สคริปต์เพื่อส่งอีเมล ToDo ไปยัง Wunderlist โดยใช้บัญชี Gmail แบบใช้ครั้งเดียว ฉันไม่รังเกียจหากบัญชีนั้นถูกบุกรุก ฉันดีใจที่คุณพบวิธีแก้ไขปัญหา
Ash
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.