• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 869
  • Last Modified:

SMTP Headers for PHP Mailer

Hi experts,

I need full smtp headers for a php mailer. This is what i have and its not working.

$connect = fsockopen($hostname,$port); 
fputs($connect, "EHLO $mydomain\r\n"); 
fputs($connect, "AUTH LOGIN\r\n"); 
fputs($connect, base64_encode($username)."\r\n"); 
fputs($connect, base64_encode($password)."\r\n"); 
fputs($connect, "FROM:$fromname <$fromemail>\r\nReply-To: $replyto\r\n");
fputs($connect, "RCPT TO:$fullname <$email>\r\n"); 
fputs($connect, "DATA\r\n"); 
fputs($connect, "MIME-Version: 1.0\r\n");
fputs($connect, "Content-Type: text/html\r\n");
fputs($connect, "Content-Transfer-Encoding: base64\r\n\r\n");
fputs($connect, "To: $email\n");
fputs($connect, "Subject: $subject\n\n"); 
fputs($connect, "$message\r\n"); 
fputs($connect, ".\r\n"); 
fputs($connect, "QUIT\r\n");

Open in new window


Thanks,
0
jebbie635
Asked:
jebbie635
  • 5
  • 5
2 Solutions
 
BarthaxCommented:
Move your FROM line to under the DATA section and then have a first FROM line of:

fputs($connect, "MAIL FROM: \"$fromname\" <$fromemail>\r\n");

$connect = fsockopen($hostname,$port); 
fputs($connect, "EHLO $mydomain\r\n"); 
fputs($connect, "AUTH LOGIN\r\n"); 
fputs($connect, base64_encode($username)."\r\n"); 
fputs($connect, base64_encode($password)."\r\n"); 
fputs($connect, "MAIL FROM: \"$fromname\" <$fromemail>\r\n");
fputs($connect, "RCPT TO:$fullname <$email>\r\n"); 
fputs($connect, "DATA\r\n"); 
fputs($connect, "MIME-Version: 1.0\r\n");
fputs($connect, "Content-Type: text/html\r\n");
fputs($connect, "Content-Transfer-Encoding: base64\r\n\r\n");
fputs($connect, "To: $email\n");
fputs($connect, "From: "$fromname" <$fromemail>\r\nReply-To: $replyto\r\n");
fputs($connect, "Subject: $subject\n\n"); 
fputs($connect, "$message\r\n"); 
fputs($connect, ".\r\n"); 
fputs($connect, "QUIT\r\n");

Open in new window

0
 
BarthaxCommented:
Note also that your lines of the e-mail should all end in \r\n and so after the Subject line you should have \r\n\r\n to provide the blank line between the headers and the message body.

SMTP standard: http://tools.ietf.org/html/rfc2821
E-mail format: http://tools.ietf.org/html/rfc2822

$connect = fsockopen($hostname,$port); 
fputs($connect, "EHLO $mydomain\r\n"); 
fputs($connect, "AUTH LOGIN\r\n"); 
fputs($connect, base64_encode($username)."\r\n"); 
fputs($connect, base64_encode($password)."\r\n"); 
fputs($connect, "MAIL FROM: \"$fromname\" <$fromemail>\r\n");
fputs($connect, "RCPT TO:$fullname <$email>\r\n"); 
fputs($connect, "DATA\r\n"); 
fputs($connect, "MIME-Version: 1.0\r\n");
fputs($connect, "Content-Type: text/html\r\n");
fputs($connect, "Content-Transfer-Encoding: base64\r\n");
fputs($connect, "To: $email\r\n");
fputs($connect, "From: "$fromname" <$fromemail>\r\nReply-To: $replyto\r\n");
fputs($connect, "Subject: $subject\r\n\r\n"); 
fputs($connect, "$message\r\n"); 
fputs($connect, ".\r\n"); 
fputs($connect, "QUIT\r\n");

Open in new window


(Corrected headers in e-mail.)
0
 
Ray PaseurCommented:
Have you considered using the free and open-source PHPMailer class?  It might be easier.  Just a thought...
https://code.google.com/a/apache-extras.org/p/phpmailer/

And if you find that you're still wrestling with email anomalies and edge cases (as most of us do) you might want to consider a professionally hosted service.  This one has worked well for me.
http://search.constantcontact.com/index.jsp
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
jebbie635Author Commented:
Is 'TO' required ? Isnt the same with 'RCPT-TO' ?
0
 
BarthaxCommented:
There are two parts to sending an e-mail: the SMTP protocol in which RCPT TO is required and the e-mail itself in which the To: header is sent.  The e-mail itself is sent in the SMTP DATA command.  Everything here constitutes what the the e-mail client sees:
fputs($connect, "MIME-Version: 1.0\r\n");
fputs($connect, "Content-Type: text/html\r\n");
fputs($connect, "Content-Transfer-Encoding: base64\r\n");
fputs($connect, "To: $email\r\n");
fputs($connect, "From: "$fromname" <$fromemail>\r\nReply-To: $replyto\r\n");
fputs($connect, "Subject: $subject\r\n\r\n"); 
fputs($connect, "$message\r\n"); 
fputs($connect, ".\r\n"); 

Open in new window


... and also what the SMTP server essentially ignores. :)
0
 
jebbie635Author Commented:
Omg this is so much reading and cant understand it. Please correct the code, this shouldnt be much for you. I really need it. This is the mailer here:

<?php
error_reporting(E_ALL); 

// MESSAGE DETAILS

$fromemail   = "";
$fromname    = "";
$replyto     = "";
$subject     = "";
$fullname    = "";
$email       = "";
$message     = "";

// SMTP INFO

$hostname    = "";
$username    = "";
$password    = "";
$port        = 25;
$mydomain    = "";

// SMTP CONNECT

$connect = fsockopen($hostname,$port); 
fputs($connect, "EHLO \'$mydomain\'\r\n"); 
fputs($connect, "AUTH LOGIN\r\n"); 
fputs($connect, base64_encode($username)."\r\n"); 
fputs($connect, base64_encode($password)."\r\n"); 
fputs($connect, "MAIL FROM: \'$fromname\' <$fromemail>\r\n");
fputs($connect, "RCPT TO: \'$fullname\' <$email>\r\n"); 
fputs($connect, "DATA\r\n"); 
fputs($connect, "MIME-Version: 1.0\r\n");
fputs($connect, "Content-Type: text/html\r\n");
fputs($connect, "Content-Transfer-Encoding: base64\r\n");
fputs($connect, "To: \'$email\'\r\n");
fputs($connect, "From: \'$fromname\' <$fromemail>\r\nReply-To: $replyto\r\n");
fputs($connect, "Subject: \'$subject\'\r\n\r\n"); 
fputs($connect, "\'$message\'\r\n"); 
fputs($connect, ".\r\n"); 
fputs($connect, "QUIT\r\n"); 

?>

Open in new window

0
 
BarthaxCommented:
I'm not in a position to test the script, alas.  Key points, however: none of your variables are populated so the message is going no-where but I expect you removed the content for posting here, so feel free to ignore this point if that's true. :)  You can't put e-mail addresses in headers surrounded by ' quotes (To: header under DATA section).  You should put names for e-mail addresses in headers in " quotes (From header under Data section).

I've made the EHLO:, MAIL FROM: and RCPT TO: envelope information (SMTP protocol) into plain information - there's then no requirement for quoting at all for the EHLO and quoting is only required in the other two if you are supplying names (non-e-mail information).

If you are still getting errors with your script, then instead of running the script, open a telnet connection to your destination SMTP server (telnet <server> <port>) and type (literally) your information to the server and see the conversation progress.  You should get a better idea of what is going wrong.

<?php
error_reporting(E_ALL); 

// MESSAGE DETAILS

$fromemail   = "";
$fromname    = "";
$replyto     = "";
$subject     = "";
$fullname    = "";
$email       = "";
$message     = "";

// SMTP INFO

$hostname    = "";
$username    = "";
$password    = "";
$port        = 25;
$mydomain    = "";

// SMTP CONNECT

$connect = fsockopen($hostname,$port); 
fputs($connect, "EHLO $mydomain\r\n"); 
fputs($connect, "AUTH LOGIN\r\n"); 
fputs($connect, base64_encode($username)."\r\n"); 
fputs($connect, base64_encode($password)."\r\n"); 
fputs($connect, "MAIL FROM: $fromemail\r\n");
fputs($connect, "RCPT TO: $email\r\n"); 
fputs($connect, "DATA\r\n"); 
fputs($connect, "MIME-Version: 1.0\r\n");
fputs($connect, "Content-Type: text/html\r\n");
fputs($connect, "Content-Transfer-Encoding: base64\r\n");
fputs($connect, "To: $email\r\n");
fputs($connect, "From: \"$fromname\" <$fromemail>\r\nReply-To: $replyto\r\n");
fputs($connect, "Subject: $subject\r\n\r\n"); 
fputs($connect, "$message\r\n"); 
fputs($connect, ".\r\n"); 
fputs($connect, "QUIT\r\n"); 

?>

Open in new window


(Errata: RCPT TO: edited.)
0
 
jebbie635Author Commented:
Its not sending. What is wrong?
0
 
jebbie635Author Commented:
I tried telnet and the server is working with this headers, so this code sends data wrong. Anybody?
0
 
jebbie635Author Commented:
Thanks.

This is working:

<?php
error_reporting(E_ALL);

// MESSAGE DETAILS

$email       = "";
$fromemail   = "";
$fromname    = "";
$replyto     = "";
$subject     = "";
$message     = "";
$mydomain    = "";

// SMTP INFO

$hostname    = "";
$username    = "";
$password    = "";

// SMTP CONNECT

$connect = fsockopen($hostname, 25);
fputs($connect, "EHLO $mydomain\r\n");
fputs($connect, "AUTH LOGIN\r\n");
fputs($connect, base64_encode($username)."\r\n");
fputs($connect, base64_encode($password)."\r\n");
fputs($connect, "MAIL FROM: $fromemail\r\n");
fputs($connect, "RCPT TO: $email\r\n");
fputs($connect, "DATA\r\n");
fputs($connect, "MIME-Version: 1.0\r\n");
fputs($connect, "Content-Type: text/html\r\n");
fputs($connect, "Content-Transfer-Encoding: 8bit\r\n");
fputs($connect, "To: \"$fullname\" <$email>\r\n");
fputs($connect, "From: \"$fromname\" <$fromemail>\r\n");
fputs($connect, "Reply-To: $replyto\r\n");
fputs($connect, "Subject: $subject\r\n\r\n");
fputs($connect, "$message\r\n");
fputs($connect, ".\r\n");
fputs($connect, "QUIT\r\n");

?>
0
 
BarthaxCommented:
Glad you got there in the end. :)
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 5
  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now