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.
Related
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.
I found a php-script on internet:
<?php
$to = "*******#yahoo.com";
$subject = "Test mail";
$message = "Hello! This is a simple email message.";
$from = "****#*****.nu";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
echo "Mail Sent.";
?>
and it work perfectly if I use it from my web-hotel. But i need it to by run on my home-server and I just simply not receiving anything. I tried to run it with php -f phpTest, and through both local ip (10.0.0.2) and by using a global hostname. I just get "Mail send" without getting the mail.
It is a ubuntu-server I am running at and it uses apache2. Like I said, it is no wrong in script because it worked on web-hotel. It should be something with my local settings, but I can't figure out what.
All help would be appreciated!
\\demon
The PHP mail function uses a local MTA (Mail Transport Agent), that is a mail deamon running on the same machine as your PHP interpreter and your Apache web server.
So you must install and configure one on your Ubuntu setup. sendmail is the classic one, but exim is said to be easily configurable, and can use your current SMTP server as a smarthost relay, which works well for a home server.
sudo apt-get install exim4-daemon-light
sudo dpkg-reconfigure exim4-config
Instead of relying on the builtin mail function which needs a working MTA, you could use a library like Swiftmailer to send the mail through an existing SMTP server (e.g. your regular mail address). That way you have the additional bonus of less spam filtering (because spam filters are sometimes very suspicious of mails that were sent from home servers).
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.
All,
I have the standard mail code to send an email in PHP.
$to = $resultset['email_address'];
$subject = "New client inquiry from Website.com";
$message = $email_message;
$from = $your_email;
$headers = "From:" . $from;
mail($to,$subject,$message,$headers,"-f $from");
The variables are created earlier in my code. However what I want to check is to make sure that the mail function was executed successfully. With this code, how can I determine if sent the email and if it didn't echo out "failure"?
Simply said: This is not possible with the PHP mail() command.
the return value from mail() just indicates, whether the mail was successfully handed over to the MTA, but not if it was sent. If e.g. your MTA is postfix, and the postfix service is stopped, mail() will happily return true, as queueing the mail to postfix worked. It will however never be sent, if postfix is not manually started (or even correctly configured).
If you really want to make sure, the mail has been sent, you need to talk to a MTA via sockets. There are frameworks for that.
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.