Testing SMTP Server from the command line

In a previous post I explained how to use the SMTPDIAG tool to test that SMTP and DNS were configured correctly. The tool does not however send a test message.

In this post I wil demonstrate two methods of sending test emails via the command line.

Method 1 – Telnet

I am going to assume that your server is Windows Server 2008 R2, although these steps will work on Server 2003 also. Another assumption is that you have the telnet client installed. If you don’t have it installed follow the steps in this post and then follow these instructions:

1. Fire up the command prompt and type telnet:


2. At the telnet prompt, type set LocalEcho then press ENTER:

Welcome to Microsoft Telnet Client
Escape Character is 'CTRL+]'
Microsoft Telnet>set LocalEcho

3. Then type open localhost 25 and then press ENTER.

Welcome to Microsoft Telnet Client
Escape Character is 'CTRL+]'
Microsoft Telnet>set LocalEcho
Local echo on
Microsoft Telnet>open localhost 25

The output will look similar to this:

220 mail.vsysad.com Microsoft ESMTP MAIL Service, Version: 7.5.7601.17514 ready at Fri, 23 Aug 2013 01:02:03 +0000

4. Type helo me and then press ENTER. You should receive a 250 response from the SMTP Server meaning that it has accepted your command:

helo me
250 mail.vsysad.com Hello []

5. Then type the mail from:email@domain.com – obviously fill in the email address you are actually sending from and then press ENTER. The output will be similar to the below:

mail from:blog@vsysad.com
250 2.1.0 blog@vsysad.com....Sender OK

6. Type rcpt to:youremail@yourdomain.com – the address you are sending to and then press ENTER. The output will be similar to the below:

rcpt to:recipient@gmail.com
250 2.1.5 recipient@gmail.com

7. Type Data and then press ENTER, resulting in the following:

354 Start mail input; end with <CRLF>.<CRLF>

8. Type Subject:This is a test email and then hit ENTER twice. Then type This is a test email being sent via telnet and hit ENTER. Hit ENTER again, then type a full stop (.), and then hit ENTER once more:

Subject:This is a test email

This is a test email being sent via telnet


9. The resulting output would be similar to this:

250 2.6.0 <WEB1Ze4CkNl4THZaN1E00000004@mail.vsysad.com> Queued mail for delivery

It means that an email has been generated and is in the queue and is ready to be delivered.

10. Now that you have finished, type quit and the connection to the SMTP Server will be closed:

221 2.0.0 mail.vsysad.com Service closing transmission channel

Connection to host lost.

A screenshot of all the commands being run is below:


That’s it. Now go to your email account and verify that the email has arrived successfully. In my case I received the email below to my Gmail account:


Method 2 – PowerShell

The PowerShell method is much less tedious and is my recommended way of sending email via the command line on Windows. Assuming that PowerShell is installed on your server, launch the console and simply run the command below, ensuring that you complete the sending and receiving email addresses plus the subject and body text:

PS C:\Users\admin> Send-MailMessage -SMTPServer localhost -To xxxxx@gmail.com -From blog@vsysad.com -Subject "This is a test email" -Body "Hi Japinator, this is a test email sent via PowerShell"

The above command sent an email to my Gmail account, a screenshot of the email generated is below:


The PowerShell method is far easier to use. You can save the command in a .ps1 file and run it on demand whenever you need to test sending/routing of mail.

How To Test SMTP Services Manually in Windows Server 2003
PowerShell Send-MailMessage command line reference

  • Pingback: Setup and Configure SMTP Server on Windows Server 2008 R2 | vSysad()

  • Sijo Samuel

    I did not get the test email

    • japinator

      Hi Sijo, which method did you use to send the test message? Can you confirm that the message was actually sent?

  • Sneha

    I m getting error after commandopen localhost 25 as Counld not open the connection to the host ,on port 25.Connect Failed.
    Can you suggest what may be issue?

    • japinator

      Hi Sneha, that error means that the server you are running the telnet command on (localhost) is not running the SMTP service on port 25. Is the SMTP service installed and running on localhost? If so, is the service started?

  • Akbar Singh

    I m using first method , on cmd it is showing that “250 2.6.0 Queued mail for delivery”

    but i didn’t get any mail. email is in queue.
    why it is not delivering ???

    • japinator

      Hi Akbar, you are supposed to be running this on localhost, not trying to connect to my mail server (mail.vsysad.com). Moreover, the error message you are seeing cannot be correct as my mail server does not allow remote connections. Follow the instructions and run the telnet command on the server running your SMTP server, which is “localhost” in order to test it accordingly.

  • GraemeW

    Thanks for the useful post – the Powershell method worked for me.
    One thing to note is that you can replace localhost with another smtp server name. For example I could send mail from my db server via smtp installed on my web server

    • http://www.vsysad.com japinator

      Hi GraemeW, thanks for the comment – you are indeed correct. My environment was a single server so the only option was to run Send-MailMessage against localhost to relay the message. I will update the post to reflect this.

  • Chris Worthington

    Great article. Very helpful and the Powershell trick was really cool. Is there a way to send to multiple recipients via PS? I tried adding another “-To” parameter but it gave me an error. Either way, great article.

    • http://www.vsysad.com japinator

      Hi Chris, thanks! To send to multiple recipients using Powershell run the command below:

      Send-MailMessage -SMTPServer localhost -To “Recipient 1 “, “Recipient 2 ” -From blog@vsysad.com -Subject “This is a test email” -Body “Hi, this is a test email sent via PowerShell”

      Change recipients as required.

  • Pingback: Test SMTP server via PowerShell/Command Line | Nick's IT Crap()