Extra characters in PHP email "from" field - php

I'm trying to send email from PHP, and although it's working, I'm noticing that I'm getting a lot of extra stuff in the "from" part of the email. The extra stuff, I'm assuming, is
information from my server?
For example, if $from = "myname", instead of "myname" only coming through in the email from field as is, I get something like:
myname#p3nlhg.phx3.secureserver.net
Here is my PHP I'm playing with, the important part being my $from var:
$from = "myname";
mail($to,$formSubj,$formMssg,$from);
Honestly that's all I have, nothing more or less (as far as the $from is concerned). How can I clean this up or make it so that only the plain value of $from, which is in this case "myname", comes out?

The 4th parameter of the mail function doesn't work this way. It expect header information. To achieve what you want to do use:
$header = "From: myname <no-reply#test.com> \r\n";
mail($to,$formSubj,$formMssg,$header);
You shouldn't use a lonely myname either. You need a valid email addess string: myname <no-reply#test.com> or no-reply#test.com. If you just put myname, PHP will try to interpret it as an email address. That's why you're getting myname#p3nlhg.phx3.secureserver.net. p3nlhg.phx3.secureserver.net must be the hostname of your server.
A nice thing about the header parameter is that you can use it to specify other less common fields. e.g.:
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday#example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive#example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck#example.com' . "\r\n";
Notice that you need to place a carriage-return/line-feed (\r\n) at the end of each header attribute. A simple line feed will not work.

According to the mail documentation, you're using $from as the $additional_headers argument.
Instead, change $from to an appropriate header. For example,
$from = "myname";
$headers = "From: $from <user#example.com>";
mail($to, $formSubj, $formMssg, $headers);
According to the documentation for additional_headers,
When sending mail, the mail must contain a From header. This can be set with the additional_headers parameter, or a default can be set in php.ini.
Failing to do this will result in an error message similar to Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing. The From header sets also Return-Path under Windows.

It's coming from the mail server that you have installed in your server, try to switch to another one, like postfix, courier or someting else.

Related

Sending only textual content with mail function in php

I have read that i must include some headers when using mail() function in PHP like:
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
but in my case i want only to send text, not html. so are those headers will still be required to make a successful mail?
Headers of mail() function are optional.
Your email can be delivered successfully, without any header.
Note that some default values will be set. As an example, if you do not declare a sender (From), the server name will be used instead.

from address come with server extension in mail

from address come with server extension, errror info#gmail.com via ecbiz132.hostername.com . how to solve this
$subject = "confirmation";
$from = "info#gmail.com";
$to = $email;
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'To:<'.$to.'>' . "\r\n";
$headers .= 'From: <'.$from.'>' . "\r\n";
$senad_replay = mail($to, $subject, $content, $headers, $from);
// errror info#gmail.com via ecbiz132.hostername.com . how to solve this
Yes, you can get rid the "via" part. Here's the details:
1) SPF and DKIM
Firstly, you would need to set an SPF record for the domain you are sending emails from and enable DKIM as well. These are primarily for identifying your messages against spam.
2) "From: anything#yourdomain.com"
Secondly, make sure you are setting the “From: ” header to be an email address on the domain you are sending messages from. Don’t pretend to be someone else. Use “From: someone#abc.com” if you are sending the messages from abc.com, rather than anything else, such as blah#def.com, or yours#gmail.com, or whatever. If you want the recipient to reply to your Gmail email instead of your domain email, use the “Reply-To: ” header. “From: ” must always be the domain email that you are sending the email from.
3) "Return-Path: return#yourdomain.com"
Thirdly and most importantly, set the “Return-Path: ” header to be the same domain as that of the “From: ” header. Use the 5th parameter of the mail() function for this:
mail('recipient#example.com', 'Subject', "Message Body", $headers, '-freturn#yourdomain.com')
So the Return-Path of this message would be “return#yourdomain.com” (the email address immediately following the -f switch). The $headers parameter should contain all the necessary message headers. Make sure “From: ” is something#yourdomain.com.
After these steps and measures, Gmail should now completely trust your messages from yourdomain.com. The ‘via‘ field of your messages should be gone and the ‘mailed-by‘ field as well as the ‘signed-by‘ field should be correctly showing up as yourdomain.com.
Hope it helps!

Sending emails with styling and formatting [duplicate]

This question already has answers here:
Closed 11 years ago.
Possible Duplicates:
Php mail: how to send html?
formatting email in php?
I'm using PHP to send emails, like this:
$to = $emailAddress;
$subject = "qwerty";
$message = "foo" . PHP_EOL . "bar";
$headers = 'From: "asdf" <email#email.com>';
mail($to, $subject, $message, $headers);
When I attempt to put HTML code within the message, it just sends the actual HTML as plaintext. This leads me to ask - how can I format emails as I can format webpages?
Make sure you're setting your headers for text/html, like so:
// To send HTML mail, the Content-type header must be set
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
See Example #4 in the PHP Manual for the full example.
To add style to your email, you first need to add a header as mentioned by jmort253, like this:
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
Once you have added this to you header. You can do styling in the actual message, ie:
$message = "<html><body><h1>Welcome</h1><p>Thanks for the email</p></body></html>";
Make sure that you do inline CSS or put it in the header, don't put it in an external CSS file. As for images, you'll need to include full paths to your server, so that the client mail application can find the image on the web.
Hope this helps.
I recommend not reinventing the wheel. Instead use phpmailer class or something similar. Will solve many other upcoming problems as well :)

Complete mail header

I need a set of mail headers to attach to my mail() function in PHP. I send emails with HTML in them, and sometimes services like Yahoo Mail block them. Therefore I need to make sure that I am at least providing the right headers.
My code:
// To send HTML mail, the 'Content-type' header must be set
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// Additional headers
$headers .= 'From: MyCompany <welcome#mycompany.com>' . "\r\n";
Is there anything else I should add?
$headers = "From: testsite <mail#testsite.com>\n";
$headers .= "Cc: testsite <mail#testsite.com>\n";
$headers .= "X-Sender: testsite <mail#testsite.com>\n";
$headers .= 'X-Mailer: PHP/' . phpversion();
$headers .= "X-Priority: 1\n"; // Urgent message!
$headers .= "Return-Path: mail#testsite.com\n"; // Return path for errors
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=iso-8859-1\n";
Most MUA's insert a lot of extra headers; however, here is sort of the bare minimum you can expect.
To:
Subject:
Date:
MIME-Version:
Content-type:
If you using HTML, then you should probably be using multipart messages--but it's not strictly necessary.
When defining if a sender is a possible spammer, many services check if the domain of the sender looks like a dialup user.
Quote from Wikipedia:
One e-mail anti-spam technique:
checking the domain names in the rDNS
to see if they are likely from dialup
users, dynamically assigned addresses,
or other inexpensive internet
services. Owners of such IP addresses
typically assign them generic rDNS
names such as
"1-2-3-4-dynamic-ip.example.com."
Since the vast majority, but by no
means all, of e-mail that originates
from these computers is spam, many
spam filters refuse e-mail with such
rDNS names.
Did the mail really come from 'mycompany.com'? I've had problems with some mail services blocking if it didn't really come from the SMTP server that the mail says it does.
A way around this, for me, was making the from to be automail#mydomainnaim.com and adding a reply-to, being the person who sent the mail using my system.
PHP 7.2+ solution
In current versions of PHP it is possible to pass an array of headers to mail() (as mentioned in the PHP docs), so the code could look a little cleaner. (Sablefoste mentioned this in their comment on the current top answer.)
In case anybody is interested, it could look like this:
$headers = [
'From' => 'testsite <mail#testsite.com>',
'Cc' => 'testsite <mail#testsite.com>',
'X-Sender' => 'testsite <mail#testsite.com>',
'X-Mailer' => 'PHP/' . phpversion(),
'X-Priority' => '1',
'Return-Path' => 'mail#testsite.com',
'MIME-Version' => '1.0',
'Content-Type' => 'text/html; charset=iso-8859-1'
];
mail('recipient#host.com', 'My subject', 'My message', $headers);
The RFCs for both IMF and MIME define the minimal set of headers, so this would be a good place to start.
For IMF, look here: https://www.rfc-editor.org/rfc/rfc5322#section-3.6
For MIME, look here: https://www.rfc-editor.org/rfc/rfc2045#section-3
The link below could be of some use defining the mandatory headers as:
Date:
The date the message was originated/written.
From:
The person "responsible" for the message.

Required Mail Headers

I have a website in which I send a confirmation mail as part of the registration process.
Some time ago, I had some troubles with the mails I sent since I used no headers (PHP mail function).
Once I put some headers, I've gotten more responses from users, but I suspect that not every message reaches its destination.
How can I be sure that the messages reach their destination?
Which are the headers that can be considered a 'must'?
This is the code of my SendMail function
mail($to,
$subject,
$message,
"MIME-Version: 1.0\n".
"Content-type: text/plain; charset=ISO-8859-1; format=flowder\n".
"Content-Transfer-Encoding: 8bit\n".
"Message-Id: <" . md5(uniqid(microtime())) . "#mysite.com>\n".
"Return-Path: <admin#mysite.com>\n".
"X-Mailer: PHP v".phpversion()."\n".
"From: admin# mysite.com");
You should use external library for working with e-mails in php like PhpMailer , SwiftMailer or Zend_Mail. All your problems will go away.
The headers need a white space at the bottom to separate the header from main body.
Tools like Spam Assassin will give you a big mark down for that.
Also you should use \r\n as a line terminator instead of just \n
From PHP.net
Multiple extra headers should be separated with a CRLF (\r\n).
The headers seems quite good to me. The only glitch I see is an extra whitespace in the From header.
I'm sure you already checked it, but just in case ...
"From: admin# mysite.com");
should be (?)
"From: admin#mysite.com");
This is a working mail function I'm using for html mail and variable $return is defined to get error report from mail server in case of fail delivery.
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
$headers .= 'From: <'.$from.'>' . "\r\n";
$return = '-f'.$from;
#mail($to, $subject, $msg, $headers, $return);
you can see more detail at here sugunan.com
The headers look ok, except for the details pointed by #Eineki. Also if you are using Windows you need to send the $to param in the form "user#mail.com" and not "Username ", because it may cause trouble, due to the way the mail() function is implemented on windows platform, the "to" address may be parsed incorrectly.
You should add a Date: header (its mandatory by RFC5322) and some mail-clients may assume January 1 1970 as an e-mail date if none is given (and it gets lost between all the other old messages).

Categories