Задать вопрос
denis_druid
@denis_druid

Как исправить функцию отправки почты?

Здравствуйте. Такая проблема. Фрилансер писал некоторый функционал на сайте, среди них функция отправки почты (сервисных сообщений пользователям). Как сейчас выяснилось, почему-то почта работала через его собственный домен. А 4 дня назад перестала работать, оказалось, что домен этого фрилансера приказал долго жить. Связи с ним нет. Он пропал сразу, как сделал (недоделал) проект.
Полный листинг функции я привел ниже. Вопрос: что в этой строке отрабатывалось и что туда надо теперь поместить, чтобы снова заработало? Помогите, друзья.
curl_setopt($curl, CURLOPT_URL, 'http://green.alpachini.ru/send_mail.php');

Вот эта функция:
function send_mail($email, $subject, $msg, $file='')
    {
        $boundary = "--" . md5(uniqid(time()));	
		$multipart = "--$boundary\n";
        $multipart .= "Content-Type: text/html; charset=utf-8\n";
        $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
	    $multipart .= "$msg\n\n";
		if(is_array($file)) {
        foreach ($file as $key => $value) {
           $fp = fopen($value, "r");
           $ffile = fread($fp, filesize($value));
           $message_part .= "--$boundary\n";
           $message_part .= "Content-Type: application/octet-stream\n";
           $message_part .= "Content-Transfer-Encoding: base64\n";
           $message_part .= "Content-Disposition: attachment; filename=\"".basename($value)."\"\n\n";
           $message_part .= chunk_split(base64_encode($ffile)) . "\n";
        }
        $multipart .= $message_part . "--$boundary--\n";
		}
		
	$db=new connect_db();
		if($db->state=="connected") {
		$id_zayav=$id_zayav*1;
		$sql="SELECT email_from FROM settings WHERE id=1";
				foreach ($db->dbo->query($sql) as $row){
				$email_from=$row[0];
				}
		}
		
			$curl = curl_init();
    		curl_setopt($curl, CURLOPT_URL, 'http://green.alpachini.ru/send_mail.php');
            curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
			curl_setopt($curl, CURLOPT_POST, true);
			curl_setopt($curl, CURLOPT_POSTFIELDS, "to=$email&tema=".urlencode($subject)."&text=".urlencode($multipart)."&from=site@site.com&boundary=$boundary");
			
			$out = curl_exec($curl);
		curl_close($curl);
    }
  • Вопрос задан
  • 180 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
djQuery
@djQuery
"Кодируем помаленьку" ("Сказка о Тройке")))
Не поленитесь, перепишите на PHPMailer и забот знать не будете.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Ну, скажем так, поправить чтобы работало не получится, нужно переписать кусок где собственно "отправка почты"(на самом деле обращение к стороннему сервису отправки почты). Собсно писать кусок где почта будет отправляться с вашего сервера, либо используйте стандартный mail(), либо подключайте php mailer.
Вопрос: что в этой строке отрабатывалось и что туда надо теперь поместить, чтобы снова заработало?
В этой строке была инициализация соединения с удаленным сервером, на котором работал скрипт отправки почты, так как теперь этот домен не отвечает - весь кусок который отвечал за отправку туда данных не работает, ну и на сервере там теперь уже ничего не выполняется соответственно )
Ответ написан
@ipokos
Ну как Вам уже писали выше, что отправка происходит через файл, который лежит на стороннем сервисе, а у того (http://green.alpachini.ru) закончился хостинг.
По сути, в условии if(is_array($file)) { ....
У вас уже собирается содержимое письма.

Если на скорую руку, можете попробовать, убрать участок кода работы с $curl
И вызвать стандартный mail().
Например:
// код вашей функции 

mail($email, $subject, $multipart); 
/*
 $curl = curl_init();
    		curl_setopt($curl, CURLOPT_URL, 'http://green.alpachini.ru/send_mail.php');
            curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, "to=$email&tema=".urlencode($subject)."&text=".urlencode($multipart)."&from=site@site.com&boundary=$boundary");
      
      $out = curl_exec($curl);
    curl_close($curl);
*/


Если решите использовать стандартный отправщик, не лишним будет почитать по нему доку: php.net/manual/ru/function.mail.php
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы