I have a Windows 2003 R2 server and I want to send an email from the command line. This server does not have the SMTP service configured. Is there a one liner that will let me send an email? My specific use case at the moment is to send an email when a performance alert is triggered, but it would be useful in general.

I'm hoping for something like

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

Update: I would much prefer a solution that does not involve installing 3rd party software.

link|improve this question

67% accept rate
Utilities like blat and sendemail don't require installation. They're both freestanding exe files. – John Gardeniers Feb 5 '10 at 22:26
I guess I have to accept that I need to at the very least copy an exe (either blat or powershell) to each machine. If that's the case, then blat is very easy to use. Thanks. I still wonder why MS left this feature out, considering how many other less useful ones they put in to the standard distro. – Peter Feb 8 '10 at 17:55
feedback

3 Answers

up vote 10 down vote accepted

I'd try blat. You could write a vbscript but there is no built in executable to send mail

link|improve this answer
seconding blat. It can be a bit picky about passing parameters directly from the command line, but once you nail it, does exactly what the OP needs. – Chris Thorpe Feb 5 '10 at 23:51
I've been using blat for years with great success. However, If I was writing in powershell, I'd switch. – uSlackr Feb 8 '10 at 19:29
feedback

Would you consider powershell rather than cmd.exe? If so, sending mail is built in:

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

To make a one liner, save the following to a powershell script file (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)

(make sure to change the smtpserver to be your real one)

Then you can call it using:

powershell.exe c:\path\to\sendmail.ps1 "from@example.com" "to@example.com" "title" "body"
link|improve this answer
Not quite a one-liner :) – John Gardeniers Feb 5 '10 at 22:26
Sorry, will edit it to fit that description. – MattB Feb 5 '10 at 22:43
1  
powershell would also have to be installed, otherwise I would have prefered it over vbscript. – Jim B Feb 5 '10 at 23:48
feedback

I've used bmail with great success in the past.

Usage (copied from website)

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)
link|improve this answer
I have to admit, I was hoping for a built in solution, though Jim's answer seems to imply that was a bit naive of me... – Peter Feb 5 '10 at 18:49
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.