Connecting to smtp.gmail.com via command line - smtp

I am in the process of writing an application that sends mail via an valid GMail user ID and password.
I just wanted to simulate the SMTP connection on my Windows XP command line, and when I telnet smtp.gmail.com at 465 port - I don't see any thing. A blank command window with title Telnet smtp.gmail.com opens with cursor. When I type in EHLO or usual SMTP handshake commands, the prompt just closes.
I am unable to figure out whats going wrong and where. I tried connecting to 587, it does not connect in telnet at all. Could anyone please clarify if I am doing something wrong?

Using Linux or OSx, do what Sorin recommended but use port 465 instead. 25 is the generic SMTP port, but not what GMail uses. Also, I don't believe you want to use -starttls smtp
openssl s_client -connect smtp.gmail.com:465
You should get lots of information on the SSL session and the response:
220 mx.google.com ...
Type in
HELO smtp.gmail.com
and you'll receive:
250 mx.google.com at your service
From there it is not quite as straightforward as just sending SMTP messages because Gmail has protections in place to ensure you only send emails appearing to be from accounts that actually belong to you. Instead of typing in "Helo", use "Ehlo". I don't know much about SMTP so I cannot explain the difference, and don't have time to research much. Perhaps someone with more knowledge can explain.
Then, type "auth login" and you will receive the following:
334 VXNlcm5hbWU6
This is essentially the word "Username" encoded in Base 64. Using a Base 64 encoder such as this one, encode your user name and enter it. Do the same for your password, which is requested next. You should see:
235 2.7.0 Accepted
And that's it, you're logged in.
There is one more oddity to overcome if you're using OSx or Linux terminals. Just pressing the "ENTER" key does not apparently result in a CRLF which SMTP needs to end a message. You have to use "CTRL+V+ENTER". So, this should look like the following:
^M
.^M
250 2.0.0 OK

For OSX' terminal:
openssl s_client -connect smtp.gmail.com:25 -starttls smtp

Start session from terminal:
openssl s_client -connect smtp.gmail.com:25 -starttls smtp
The last line of the response should be "250 SMTPUTF8"
Initiate login
auth login
This should return "334 VXNlcm5hbWU6".
Type username
Type your username in base64 encoding (eg. echo -n 'your-username' | base64)
This should return "334 UGFzc3dvcmQ6"
Type password
Type your password in base64 encoding (eg. echo -n 'your-password' | base64)
Success
You should see "235 2.7.0 Accepted" and you're are successfully logged in

Gmail require SMTP communication with their server to be encrypted. Although you're opening up a connection to Gmail's server on port 465, unfortunately you won't be able to communicate with it in plaintext as Gmail require you to use STARTTLS/SSL encryption for the connection.

Jadaaih, you can connect send SMTP through CURL - link to Curl Developer Community.
This is Curl Email Client source.

Check this post in lifehacker : Geek to Live: Back up Gmail with fetchmail . It uses a command line program. Check and see if it helps. BTW why are you using command line when there are many other nice alternatives?

tcp/465 was initially intended for establishing the SSL(and newer TLS) layer first, and inside doing cleartext or plain old protocols (smtp here)
tcp/587 was intended as a replacement to default tcp/25 port initially when spammers and mass mailing attacks commenced like a decade or more ago, but also during those infamous AOL ages, when some funny ISP had some blocks on default ports outbound (such as that tcp/25) for denying their own customers (AOL) to mass-send emails/spam back then, but AOL-customers needing to use alternative mail-accounts and mail-providers still needed to send their mails from AOL-internet connections, so they could still connect to tcp/587 and do simple smtp on it back then.
The deal with the STARTTLS way to do smtp is to use the two well known originally plain-text tcp/25 and tcp/587 ports, and only when the initial clear-text connect suceeded, to then START the TLS layer (thus STARTTLS) from there on, having a secured connection from that point onwards.
As for debugging these kind of things maybe via command-line tools, for example for windows there is the historical blat command line mailer (smtp), which up till today cant do TLS (STARTTLS) so it can only use plain-text smtp to send its mails.
http://www.blat.net/
Then there are numerous projects freeware and open source software that have more capabilities and features, such as
smtp client: mailsend # googlecode
http://code.google.com/p/mailsend/
smtp client: msmtp # sourceforge (related to mpop below)
http://msmtp.sourceforge.net/
pop3 client: mpop # sourceforge
http://mpop.sourceforge.net/

How to connect to "Google SMTP mail server" from the command line?
1] SSL connect command
openssl s_client -connect {{server_name}}:{{server_port}} -crlf -quiet -starttls smtp
with variables
server_name: smtp.gmail.com
server_port: 587
user_name__hash: echo -n '{{user_name}}' | base64
user_password__hash: echo -n '{{user_password}}' | base64
2] SMTP mail server commands - every command in one line
auth login
{{user_name__hash}}
{{user_password__hash}}
helo {{server_name}}
mail from: <{{message_from}}>
rcpt to: <{{message_to}}>
DATA
from: <{{message_from}}>
to: <{{message_to}}>
subject:{{message_subject}}
Content-Type: text/html; charset='UTF-8'; Content-Transfer-Encoding: base64;
MIME-Version: 1.0
{{message_content}}
.
quit

Try this:
telnet smtp.gmail.com 587

gmail uses an encrypted connection. So, even after you establish a connection, you wont be able to send any email. The encryption is a little complex to manage. Try using openssl instead.
The thread below should help-
How to send email using simple SMTP commands via Gmail?

Related

telnet smtp.gmail.com returns no response

I can't connect to my smtp gmail from my unix environment,
when I do telnet smtp.gmail.com I get response
Trying 74.125.68.108...
telnet: connect to address 74.125.68.108: Connection timed out
Trying 2404:6800:4003:c02::6d...
How do I debug this?
Gmail requires SMTP communication with their server to be encrypted. You're opening up a connection to Gmail's server on port 465, unfortunately you won't be able to communicate with it in plaintext as Gmail require you to use STARTTLS/SSL encryption for the connection.
Try this:
telnet smtp.gmail.com 587
OR using Linux or OSx, you can try to use 465 with openssl.
openssl s_client -connect smtp.gmail.com:465
You should get lots of information on the SSL session and the response:
220 mx.google.com ...
Type in
HELO smtp.gmail.com
and you'll receive:
250 mx.google.com at your service
From there it is not quite as straightforward as just sending SMTP messages because Gmail has protections in place to ensure you only send emails appearing to be from accounts that actually belong to you. Instead of typing in "Helo", use "Ehlo". I don't know much about SMTP so I cannot explain the difference, and don't have time to research much. Perhaps someone with more knowledge can explain.
Then, type:
auth login
And you will receive the following:
334 VXNlcm5hbWU6
This is the word "Username" encoded in Base 64. Using a Base 64 encoder such as this one, encode your user name and enter it. Do the same for your password, which is requested next. You should see:
235 2.7.0 Accepted
And that's it, you're logged in.
There is one more oddity to overcome if you're using OSx/Linux terminals. Just pressing the "ENTER" key does not result in a CRLF which SMTP needs to end a message. You have to use "CTRL+V+ENTER". So, this should look like the following:
^M
.^M
250 2.0.0 OK
Not a answer,but just posting the outcomes of above suggestions.
telnet smtp.gmail.com 465
Trying 74.125.68.108...
telnet: connect to address 74.125.68.108: Connection timed out
Trying 2404:6800:4003:c02::6c...
telnet smtp.gmail.com 587
Trying 74.125.68.108...
telnet: connect to address 74.125.68.108: Connection timed out
Trying 2404:6800:4003:c02::6c...

Msmtprc SMTP with Office365

I am configuring msmtprc smtp to send an outbound email and having a trouble with office365. It's working fine with Gmail account, but I am getting the following error with office 365.
msmtp: authentication failed (method LOGIN)
msmtp: server message: 535 5.7.3 Authentication unsuccessful [BN6PR13CA0016.namprd13.prod.outlook.com]
msmtp: could not send mail (account default from /etc/msmtprc)
/var/log/msmtp.log
Authentication unsuccessful [BN6PR13CA0016.namprd13.prod.outlook.com]' errormsg='authentication failed (method LOGIN)' exitcode=EX_NOPERM
/etc/msmtprc
defaults
auth on
logfile /var/log/msmtp.log
account office
host smtp.office365.com
port 587
protocol smtp
from support#example.net
user support#example.net
password *******
tls on
tls_starttls on
tls_trust_file /etc/pki/tls/certs/ca-bundle.crt
Does anyone successfully use Msmtprc with office365?
Thank you.
I've been successfully using msmtp fine for quite some time, using the following settings (on a CentOS 7 box), but with the config in $HOME/.msmtprc since it's just for my user rather than globally:
account default
host smtp.office365.com
port 587
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-bundle.crt
tls_certcheck on
auth on
user username#example.com
passwordeval pass office365.com
from username#example.com
logfile ~/.msmtp.d/msmtp.log
..so this is 99% the same as yours except that instead of having the password in the file I'm using passwordeval to provide it via the output of the given command.
Perhaps multiple spaces between password and the password itself is causing the spaces to be added to the start of the password?
You could also try running msmtp so that it has a controlling terminal (i.e. run from the shell rather than via the service manager as with systemctl) to test whether providing it the password that way works as expected?

Using domain mail server for sendmail

The piece of php script is:
$sendmail=1;
$sendmail_path='/path/to/sendmail';
$smtp_server='localhost';
My webhost want me to use my domain smtp mail server mail.xxxxx.net instead of "localhost" otherwise sendmail is blocked.
I don't know how to reset the script.
Please help me
Thanks
One of the settings that you tried
<?php
$smtp_server='mail.telugugreetings.net';
is actually a correct setting, as indicated by its error message:
Additional errors: 550 Access denied - Invalid HELO name (See RFC2821 4.1.1.1)
This is an SMTP error, so you have successfully connected to your SMTP server. This error indicates a completely different problem:
4.1.1.1 Extended HELLO (EHLO) or HELLO (HELO)
These commands are used to identify the SMTP client to the SMTP server. The argument field contains the fully-qualified domain name of the SMTP client if one is available. In situations in which the SMTP client system does not have a meaningful domain name (e.g., when its address is dynamically allocated and no reverse mapping record is available), the client SHOULD send an address literal (see section 4.1.3), optionally followed by information that will help to identify the client system. y The SMTP server identifies itself to the SMTP client in the connection greeting reply and in the response to this command.
Make sure that you are setting the "From" field properly. It should probably be something ending in #telugugreetings.net. Without knowing more about your mail server and your PHP code, including any libraries you may be using to send mail, I can't be more specific.
You might need to contact your hosting provider again to ask about this new error message.
The PHP manual's mail() Runtime configuration says:
Used under Windows only: host name or IP address of the SMTP server PHP should use for mail sent with the mail() function.
Click Here for PHP Mail Runtime configuration
Is this on you local Windows machine?
Are you hosting on a Windows machine?
If not Windows the SMTP directive is ignored.
If you have a Windows machine:
The PHP setting for SMPT is a "PHP_INI_ALL, Entry can be set anywhere"
Which mean this directive can be set Runtime, in:
php.ini, .htaccess, httpd.conf or .user.ini
Get you SMPT Configurations Setting:
echo ini_get('SMTP');
To Set you SMTP
ini_set ('SMTP', $SMPTServer)
Where $SMPTServer is the host name or IP address of the SMTP server PHP should use for mail sent.

Relay access denied on sending mail, Other domain outside of network

Sending mail results in error "Relay access denied".
It throws "Relay access denied", whenever I tried to send mail to "other_domain" from "outside_network".
It works just fine for "myown_domain" from "outside/inside_network" and to "other_domain" from "inside_network".
Here is the list of telnet commands.
mail from:myself#mydomain.com
- 250 2.1.0 Ok
rcpt to:yourself#mydomain.com
- 250 2.1.5 Ok
rcpt to:yourself#yourdomain.com
- 554 5.7.1 <yourself#yourdomain.com>: Relay access denied.
rcpt to:yourself#gmail.com
- 554 5.7.1 <yourself#gmail.com>: Relay access denied.
rcpt to:yourself#yahoo.com
- 554 5.7.1 <yourself#yahoo.com>: Relay access denied.
I followed all the steps described in "Microsoft Support" and make sure that server configured in correct way and it do not reject any mail. I also tried to trace through using couple of blogs like this one.
While using MxToolbox also got the same result "Relay access denied".
As "Relay access denied" is very common issue.. there are lot of blogs/documentation are there.. I tried to read all, but I think I am looking in wrong place.
Does anybody have any suggestion?
If it is giving you relay access denied when you are trying to send an email from outside your network to a domain that your server is not authoritative for then it means your receive connector does not grant you the permissions for sending/relaying. Most likely what you need to do is to authenticate to the server to be granted the permissions for relaying but that does depend upon the configuration of your receive connector. In Exchange 2007/2010/2013 you would need to enable ExchangeUsers permission group as well as an authentication mechanism such as Basic authentication.
Once you're sure your receive connector is configured make sure your email client is configured for authentication as well for the SMTP server. It depends upon your server setup but normally for Exchange you would configure the username by itself, no need for the domain to appended or prefixed to it.
To test things out with authentication via telnet you can go over my post here for directions: https://jefferyland.wordpress.com/2013/05/28/essential-exchange-troubleshooting-send-email-via-telnet/
Configuring $mail->SMTPAuth = true; was the solution for me. The reason why is because without authentication the mail server answers with 'Relay access denied'. Since putting this in my code, all mails work fine.
I'm using THUNDERBIRD as a MUA and I have same issues.
I solved adding the IP address of my home PC on mynetworks parameter on main.cf
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 MyIpAddress
P.S. I don't have a static ip for my home PC so when my ISP change it I ave to adjust every time.
Set your SMTP auth to true if using the PHPmailer class:
$mail->SMTPAuth = true;

Exchange SQL Server 2008 Database Mail issue

In my web application I have created a mail sender class and set the configurations of web.config file like this:
<mailSettings>
<smtp deliveryMethod="PickupDirectoryFromIis">
<network host="smtp.domain.com"
port="587"
userName="mail#domain.com"
password="password"/>
</smtp>
</mailSettings>
This is sending email. But SQL Server database mail can not send mail with the same account info.
Only one difference is PickupDirectoryFromIis .
Is there any setting on exchange server?
In the SQL Server Logs the errors are following.
Message
The mail could not be sent to the recipients because of the mail
server failure. (Sending Mail using Account 2 (2012-09-30T16:55:04).
Exception Message: Cannot send mails to mail server. (The SMTP server
requires a secure connection or the client was not authenticated. The
server response was: 5.7.1 Client was not authenticated).
Looks like this is a Authentication issue or port no issue.
Authentication Issue:
—————————-
Please make sure you have put the information as explained below:
Server name: smtp.gmail.com ( this is really important)
port no: 587 ( on many website this is given as 465 which is wrong, use 587 )
Check : This server requires a secure connection
Check Basic Authentication
username: youremailid#gmail.com ( should have gmail.com)
password: XXXXXXXXXXXXX
confirm password: confirm your password
Port No Issue:
——————–
Make sure port 587 is opened in your machine if you are following above example. If you are using any other port number (usually its port 25) to set up database mail in your office, make sure you speak with your security team and ask them to unblock port 25. Once they unblock port 25, your databasemail will work.
Network Connectivity:
—————————–
Also check network connectivity from your machine, if you can connect to internet from your machine on which you are testing your database mail. To test, do the following
Start- Run- type cmd – Hit Enter
Type ping gmail.com -t and then hit enter.
If output displays as Request timed out, it actually means there is network connectivity problem. Otherwise, your network connectivity is good.