วิธีที่ง่ายที่สุดในการส่งอีเมลจากบรรทัดคำสั่งโดยใช้ windows 2003 R2


11

ฉันมีเซิร์ฟเวอร์ Windows 2003 R2 และฉันต้องการส่งอีเมลจากบรรทัดคำสั่ง เซิร์ฟเวอร์นี้ไม่มีบริการ SMTP ที่กำหนดค่า มีหนึ่งซับที่จะให้ฉันส่งอีเมลหรือไม่ กรณีการใช้งานเฉพาะของฉันในขณะนี้คือการส่งอีเมลเมื่อมีการแจ้งเตือนประสิทธิภาพการทำงาน แต่มันจะมีประโยชน์โดยทั่วไป

ฉันหวังว่าจะมีอะไรเช่นนี้

foomail -t peter@example.org -f blah@example.org -m "Alert!  the sky is falling"

อัปเดต: ฉันต้องการโซลูชันที่ไม่เกี่ยวข้องกับการติดตั้งซอฟต์แวร์บุคคลที่สาม


เครื่องมือเช่น blat และ sendemail ไม่จำเป็นต้องทำการติดตั้ง พวกเขาทั้งสองไฟล์ exe อิสระ
John Gardeniers

ฉันเดาว่าฉันต้องยอมรับว่าฉันต้องคัดลอก exe อย่างน้อยที่สุด (อย่างใดอย่างหนึ่งไม่ดีหรือ powershell) ไปยังแต่ละเครื่อง หากเป็นเช่นนั้น blat นั้นใช้งานง่ายมาก ขอบคุณ ฉันยังสงสัยว่าเหตุใด MS จึงละทิ้งคุณลักษณะนี้ไปพิจารณาว่ามีประโยชน์น้อยกว่าที่พวกเขาใช้ใน distro มาตรฐาน
ปีเตอร์

คำตอบ:


15

ฉันพยายามBLAT คุณสามารถเขียน vbscript แต่ไม่มีการสร้างขึ้นในการปฏิบัติการเพื่อส่งจดหมาย


blat ที่สอง มันอาจเป็นเรื่องพิถีพิถันเกี่ยวกับการส่งพารามิเตอร์โดยตรงจากบรรทัดคำสั่ง แต่เมื่อคุณตอกหมุดแล้วทำสิ่งที่ OP ต้องการ
Chris Thorpe

ฉันใช้ blat มาหลายปีและประสบความสำเร็จอย่างมาก อย่างไรก็ตามถ้าฉันเขียนใน PowerShell ฉันจะเปลี่ยน
uSlackr

blat สามารถทำงานเป็นส่งเส้นทางอีเมลสำหรับ PHP บน Windows ได้หรือไม่
SaidbakR

14

คุณจะพิจารณา powershell มากกว่า cmd.exe หรือไม่ ถ้าเป็นเช่นนั้นการส่งจดหมายจะถูกสร้างขึ้นใน:

$SmtpClient = New-Object System.Net.Mail.SmtpClient
$SmtpServer = "your.mail.host.com"
$SmtpClient.host = $SmtpServer 

$From = "Me <User@example.com>"
$To = User2@example.com
$Title = "Subject"
$Body = "Body Text" 
$SmtpClient.Send($From,$To,$Title,$Body)  

ในการสร้างซับให้บันทึกไฟล์ต่อไปนี้ลงในไฟล์สคริปต์ powershell (sendmail.ps1):

   param(  
        [string] $From = "from@example.com",
        [string] $To = "to@example.com",
        [string] $Title = "title",
        [string] $Body = "body"
    )
    $SmtpClient = New-Object System.Net.Mail.SmtpClient
    $SmtpServer = "your.mail.host.com"
    $SmtpClient.host = $SmtpServer 
    $SmtpClient.Send($From,$To,$Title,$Body)

(อย่าลืมเปลี่ยน smtpserver ให้เป็นของจริง)

จากนั้นคุณสามารถโทรโดยใช้:

powershell.exe c:\path\to\sendmail.ps1 "from@example.com" "to@example.com" "title" "body"

1
PowerShell ก็จะต้องมีการติดตั้งมิฉะนั้นฉันจะชอบมันมากกว่า vbscript
Jim B

คำตอบที่ดี เพียงหนึ่งการเปลี่ยนแปลงเล็กน้อยอาร์กิวเมนต์ต้องเป็นเครื่องหมายคำพูดเดี่ยว
Brain2000

6

ฉันเคยใช้bmailที่ประสบความสำเร็จอย่างมากในอดีต

การใช้งาน (คัดลอกมาจากเว็บไซต์)

C:\>bmail /?

    Command Line SMTP Emailer V1.07
    Copyright(C) 2002-2004 Craig.Peacock@beyondlogic.org
    Usage: bmail [options]
            -s    SMTP Server Name
            -p    SMTP Port Number (optional, defaults to 25)
            -t    To: Address
            -f    From: Address
            -b    Text Body of Message (optional)
            -h    Generate Headers
            -a    Subject (optional)
            -m    Filename (optional) Use file as Body of Message
                -c    Prefix above file with CR/LF to separate body from header
                -d    Debug (Show all mail server communications)

1
ฉันต้องยอมรับว่าฉันหวังว่าจะมีวิธีแก้ปัญหาในตัวแม้ว่าคำตอบของจิมดูเหมือนจะบอกเป็นนัย ๆ ว่าฉันไร้เดียงสานิดหน่อย ...
Peter



0
sendEmail -f %from_address% -t %to_address% -u "Subject Line" -m "Message" -s %smtp_server%

โปรแกรมอรรถประโยชน์ Win ที่ง่ายที่สุดที่ฉันพบและใช้ในสภาพแวดล้อมการผลิต ปฏิบัติการแบบสแตนด์อโลนโดยไม่ต้องติดตั้งหรือกำหนดค่าที่ได้รับคำสั่ง รองรับทั้งที่ไม่ใช่ TLS และ TLS และมีตัวดีบักซึ่งบางครั้งก็มีประโยชน์

http://caspian.dotconf.net/menu/Software/SendEmail/#download

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.