mailgun logo

PHP имеет встроенные функции для отправки почтовых сообщений однако обычно такие письма сразу же попадают в спам. Поэтому необходимо использовать API для отправки электронных писем, которые будут попадать именно в папку «Входящие» почтового ящика адресата, а не в спам. Большинство APIплатные, но если вам необходимо с чего-то начать нужен бесплатный сервис. Тут на сцене появляется Mailgun. 10.000 электронных писем бесплатно каждый месяц. Регистрация также бесплатная, данные кредитной карты не требуются.

Зарегистрируйтесь на https://mailgun.com/signup и войдите в свой аккаунт. Для использования сервиса вам понадобиться Mailgun API Key а также указать свой домен. Также необходимо будет подвердить право владения доменом. Без этого, количество писем будет ограничено 300 в сутки.
Перейдите на https://mailgun.com/cp/my_account и в левом верхнем углу вы увидите свой API Key, строка вида key-3358fhrhs333dsj43e3e5532.

Mailgun предлагает собственный класс для отсылки сообщений, однако здесь я бы хотел бы поделиться более простым решением на базе PHP + cURL. На базе cURL написана функция send_mail:

<? function send_mail($email,$subject,$msg) { 
$api_key="";/* Api Key got from https://mailgun.com/cp/my_account */ 
$domain ="";/* Domain Name you given to Mailgun */ 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
curl_setopt($ch, CURLOPT_USERPWD, 'api:'.$api_key); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); 
curl_setopt($ch, CURLOPT_URL, 'https://api.mailgun.net/v2/'.$domain.'/messages'); 
curl_setopt($ch, CURLOPT_POSTFIELDS, array( 'from' => 'Open <mail@youriste.com>',
'to' => $email,
'subject' => $subject,
'html' => $msg
));
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
?>

Не забудьте задать переменные $api_key и $domain.
Теперь можно отсылать письма, передавая в функцию параметры:

$email - адрес получателя
$subject - тема письма
$msg - тело письма

Пример:


<?
send_mail("receiver@domain.com", "Hello!", "Have a nice day!");
?>