Najprostszym sposobem wysłania wiadomości e-mail z wiersza polecenia przy użyciu systemu Windows 2003 R2


11

Mam serwer Windows 2003 R2 i chcę wysłać wiadomość e-mail z wiersza polecenia. Na tym serwerze nie skonfigurowano usługi SMTP. Czy istnieje jedna linijka, która pozwoli mi wysłać wiadomość e-mail? Moim szczególnym przypadkiem użycia jest wysłanie wiadomości e-mail po uruchomieniu alertu o wydajności, ale ogólnie byłoby to przydatne.

Mam nadzieję na coś takiego

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

Aktualizacja: Wolałbym rozwiązanie, które nie wymaga instalowania oprogramowania innych firm.


Narzędzia takie jak blat i sendemail nie wymagają instalacji. Oba są wolnostojącymi plikami exe.
John Gardeniers,

Chyba muszę zaakceptować fakt, że muszę przynajmniej skopiować plik exe (blat lub PowerShell) na każdą maszynę. W takim przypadku blat jest bardzo łatwy w użyciu. Dzięki. Nadal zastanawiam się, dlaczego MS pominęło tę funkcję, biorąc pod uwagę, ile innych mniej przydatnych wprowadzili do standardowej dystrybucji.
Peter

Odpowiedzi:


15

Spróbowałbym bezkarnie . Możesz napisać vbscript, ale nie ma wbudowanego pliku wykonywalnego do wysyłania poczty


oddelegowanie blat. Może być nieco wybredny w przekazywaniu parametrów bezpośrednio z wiersza poleceń, ale po naciśnięciu robi dokładnie to, czego potrzebuje OP.
Chris Thorpe,

Używam blat od lat z wielkim sukcesem. Jednak gdybym pisał w PowerShell, zmieniłbym.
uSlackr

Czy blat może działać jako ścieżka wysyłania poczty dla PHP w systemie Windows?
SaidbakR

14

Czy bierzesz pod uwagę powershell zamiast cmd.exe? Jeśli tak, wysyłanie poczty jest wbudowane:

$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)  

Aby utworzyć jeden liner, zapisz następujące elementy w pliku skryptu 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)

(pamiętaj, aby zmienić smtpserver na swój prawdziwy)

Następnie możesz to nazwać za pomocą:

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

1
musiałby być również zainstalowany PowerShell, w przeciwnym razie wolałbym go od vbscript.
Jim B

Niezła odpowiedź. Tylko jedna drobna zmiana, argumenty muszą być pojedynczymi cudzysłowami.
Brain2000

6

W przeszłości korzystałem z bmaila .

Użycie (skopiowane ze strony internetowej)

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
Muszę przyznać, że liczyłem na wbudowane rozwiązanie, choć odpowiedź Jima wydaje się sugerować, że było to dla mnie trochę naiwne ...
Peter



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.