Trouble getting simple php mail script to work on OSX - php

I am trying to get this simple php mail script to send mail to my email addres (mike_minerva#yahoo.com) and I cannot get it to work. I set my sendmail_path in php.ini to the right folder (/etc/sbin/sendmail) but that did not seem to help. What else could I be missing? The script always returns failure.
<?php
$to = "mike_minerva#yahoo.com";
$subject = "Test mail";
$message = "Hello! This is a simple email message.";
$from = "someonelse#example.com";
$headers = "From: $from";
mail($to,$subject,$message,$headers);
if(mail($to,$subject,$message,$headers))
echo "Mail Sent.";
else
echo "failure";
?>

SwiftMailer is a good library for the purpose of authenticating to your SMTP server to send mail.
http://swiftmailer.org/

try to use PEAR MAIL package.

In case anyone else comes to this question via google, another main cause of php mail not working is that the function is blocked on many servers due to the danger of outgoing spam.
There are some good smtp mail classes out there that are very easy to use. I only use mail() for debugging purposes... almost never in a live environment.

Related

sending mail using pear php in xampp

Below is my php code to send email.
I have configured xampp for squirrel mail and hmail server.
am able to send mails locally but my php progam is working but am unable to receive mails.
how can i configure my smtp,pop and imap in xampp/hmail server.
<?php
require_once "Mail.php";
$to = 'admin#hatsoff.com';
$subject = 'Customer_Details Report';
$msg="php mail";
$headers = 'From: abd#abd.com' . "\r\n" ;
$result=mail($to, $subject, $msg, $headers);
if($result)
{
print 'mail sent';
}
else
{
print 'mail not sent';
}
?>
Unless you need live emails you could consider a local SMTP mail catching program such as :
http://download-codeplex.sec.s-msft.com/Download/Release?ProjectName=smtp4dev&DownloadId=269147
I ended up using it to test out my sent emails etc, much easier than configuring mail servers and the such, especially if you jump around on different computers.
Please have a look at the official documentation:
http://www.php.net/manual/en/mail.configuration.php
You will need to edit the php.ini file of your PHP runtime.
Also you should think about possible security issues, spam prevention like using captchas etc.
go through this link :
http://www.php.net/manual/en/mail.configuration.php
and also edit php.ini file.
i think this is work fine for you.

php email - email is not getting sent

Till yesterday below code was working. not sure, today below code is not working. I am not getting any email. Though, I am getting echo as right, but I am not getting any email.
$to = "yyyyy#yahoo.com";
$subject = "Test mail";
$message = "Hello! This is a simple email message.";
$from = "xxxxx#example.com";
$headers = "From:" . $from;
if (mail($to, $subject, $message, $headers)) {
echo "right";
} else {
echo "wrong";
}
Any reason why this is happening?
I added print phpinfo(); and check for sendmail_path. I found below.
sendmail_path /usr/sbin/sendmail -t -i
Answer
It was server problem. Hence email was not getting sent.
From what i understand the email is sent from the PHP mail() function. This function uses the local MTA to deliver the message.
If you have control over the server and its MTA you can start checking the logfiles of the server. There you should see the email from the PHP mail() function showing up. If this is not the case PHP seems to not pass it on to the MTA (in your case sendmail).
If it shows up in the logs, check the lines for more details. The reason can be in there. If you are not sure, post the log content (do not forget to mask private details of it).
But if it does not show any problems in the logs there could be a couple of other reasons. Like your IP to be blacklisted. To check that visit the following website http://mxtoolbox.com. But it would be possible as well that the receiving email server is bouncing the email back ... which would show up in the servers root inbox where you could see the return reason in it.
I hope that was helpfull for you!?
To fix the problem in Ubuntu, Apache. You have to make sure that you have a mail sending software installed in your computer!
in ubuntu, open terminal and type the following command:
sudo apt-get install sendmail
after that try again!
There is no PHP error here, it is a problem with your server setup. PHP will return true on mail() once the mail has been send off to sendmail, or whatever you are using. It does not know whether the email has actually been sent or not.
Try
$message = "test 1\r\ntest 2\r\ntest 3";
$message = wordwrap($message, 70, "\r\n");
mail(SETYOURMAIL#MAIL.COM', 'My Subject', $message);
if this does not work check the php.ini
http://www.quackit.com/php/tutorial/php_mail_configuration.cfm
Some time mail() function may not work, so you should use PHPMailer, A well written documentation is written here :
rohitashv.wordpress.com/2013/01/19/how-to-send-mail-using-php/

PHP Mail() not working on remote server

I am developing an application and have been testing the mail() function in PHP. The following works just fine on my local machine to send emails to myself, but as soon as I try to send it from the testing environment to my local machine, it silently fails.
I will still get the "Mail Sent" message, but no message is sent. I turned on the mail logging in the php.ini file, but even that doesn't seem to be populated after I refresh the page.
Again, the .php files and php.ini files are identical in both environments. Port 25 has been opened on the testing environment, and we are using a Microsoft Exchange server.
<?php
$to = "user#example.com";
$subject = "Test mail";
$message = "Hello! This is a simple email message.";
$from = "user#example.com";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
echo "Mail Sent.";
?>
SMTP area of the php.ini file:
[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = exhange.server.org
; http://php.net/smtp-port
smtp_port = 25
; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = user#example.com
First of all, even when mail fails, the echo "Mail Sent." will be shown. The php function mail() will return true on success and false on failure. Put it in an if and you can check if the mail has been sent:
if(mail($to,$subject,$message,$headers)) echo "Mail Sent.";
Should be working to check if the email was sent or not.
Regarding your problem that it is not working, I am not quite sure and I might be wrong, but some servers as of my experience want the \r\n behind each headerline.
$headers = "From:" . $from . "\r\n";
But as already said, I might be wrong and related to the examples on here, it is not necessary when using one headerline - http://php.net/manual/en/function.mail.php
When I am testing the mail function, I do not put any header information into the mail function, just $to, $subject, $message. You might give it a try. I really hate using the php mail function by myown, I always use a PHP mailer class.
Sorry if I couldn't answer to your real problem, that the email can not be sent. I hope you
Check in your PHP distro for PEAR and Mail.php. On the cmd line, "php -i" to find your resources. I believe PEAR and Mail.php is fairly common for distros over 5.2. I'm on a Mac and Linux server and prefer PEAR mail over the PHP mail function. Windows should be similar. Here is an example of sending multiple emails using PEAR Mail.
/** PEAR::MAIL
* PEAR::Mail only opens one mail socket for multiple emails sent
*/
require_once('/opt/local/lib/php/Mail.php');
$body = $_POST['message'];
//using sendmail on backend
$params['sendmail_path'] = '/usr/sbin/sendmail';
//using factory method
$mail_object =& Mail::factory('sendmail',$params);
//loop through selected users to send
for ($i=0;$i<count($recipients);$i++){
if (!empty($recipients[$i]['email'])&&($recipients[$i]['alt_email'])){
//concatinate email and alt_email
$address = $recipients[$i]['email'].",".$recipients[$i]['alt_email'];
}
else {
//only one user address
$address = $recipients[$i]['email'];
}
//send the mail instance
$mail_object->send($address,$headers,$body);
if (PEAR::isError($mail_object)) {print($mail_object->getMessage());}
} //close the for loop
Some time your hosting service providers are block outgoing SMTP Authentication. Please confirm with you hosting providers.

php mail function not sending emails / taking too long to send emails

I have a rackspace cloud where I want to set up LAMP. the server has CentOS.
I have sendmail installed and the php mail function use this, but it takes too long to send an email using the php mail function
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
$to = "email#somedomain.com"
$subject = "activation code";
$message = "Activation code: 10";
$from = "activate#mywebsite.com ";
$headers = "From: $from";
if(mail($to, $subject, $message, $headers)) {
echo 'success';
}
else { echo 'deny'; }
but this takes a lot of time, and when I ask rackspace about this they said the mail function might be using a public mailserver to send emails and as the queue is too long it takes time. but I have another email server too.
is there anyway I can get this to work fast? and can I make the send mail installation to use that email server I have ?
Try using the PHP Pear Mail package it allows you to send via sendmail, pop, smtp, or imap http://pear.php.net/packages.php?catpid=14&catname=Mail theres also the ability to easily add attachments and queue messages.
I had the same issue on my rackspace cloud and this resolved it.

SMTP server response: 550 Invalid recipient to a simple email feature

i am creating a website using php that sends confirmation messages through emails..
to edit my php.ini, i followed this walkthrough:
http://php.net/manual/en/ref.mail.php
i downloaded a free smtp server to test the connections, i used port 25, and the DNS server as localhost. I use this server to test if the email i send is being connected
i used this simple code to test the mail() function:
<?php
$to = 'myownemail#yahoo.com';
$subject = 'the subject';
$from = 'email#domain.com';
$message = 'hello';
if(mail($to, $subject, $message, "From: $from"))
echo "Mail sent";
else
echo "Mail send failure - message not sent"; ?>
when running, the smtp server indicates that the current active connection is the "myownemail#yahoo.com".
but the website shows this error message:
SMTP server response: 550 Invalid recipient
what should i do? i am very new to development and used smtp for the first time so i have no idea what is happening
PS. I got the smtp server here> softstack.com/freesmtp.html
For testing you could try this tool, called Test Mail Server Tool, instead. It has the benefit of not sending actual emails thus spamming your account, but saving/opening the email on your desktop, the same email which would have been sent. You can examine the headers this way and debug more easily and much faster. Note that it's useless in production, and testing remotely. It was not meant for that.
Remove $from in request header from inside quotes and try using a valid email address.
if(mail($to, $subject, $message, "From: " . $from))

Categories