Перейти к содержимому

Сервис обмена электронных валют


  • Закрытая тема Тема закрыта

Как сделать отправку почты если не работает mail()

#1 кипятильник

кипятильник
  • Пользователь
  • 102 сообщений
  • Репутация: 0
0

Отправлено 18 Февраль 2009 - 17:11

Как сделать отправку почты если не работает mail() разные классы перепробывал не чего не получилось на сервере есть зарегистрирована почта, как можно сделать очень срочно нужно

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 18 Февраль 2009 - 17:20

SMTP или же sendMail и подобные
  • 0

#3 кипятильник

кипятильник
    Topic Starter
  • Пользователь
  • 102 сообщений
  • Репутация: 0

Отправлено 18 Февраль 2009 - 18:17

ну SMTP то там есть, но возникли проблемы с настройкой, не поможеш? может стыкался


  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 18 Февраль 2009 - 22:11

Что именно не получается? Пиши, я думаю вместе разберемся.
  • 0

#5 кипятильник

кипятильник
    Topic Starter
  • Пользователь
  • 102 сообщений
  • Репутация: 0

Отправлено 19 Февраль 2009 - 01:09

сделал, нашол подходящий скрипт правда один только и заработал, через сокет с smtp но нужно вложить файл для отправки как сделать?


скрипт на всяк случай

<?php
$smtp_server = "mail.svit-mebliv.ua";
$port = 25;
$mydomain = "svit-mebliv.ua";
$username = "test";
$password = "";
$sender = "test@svit-mebliv.ua";
$recipient = "a@tires.net.ua";
$subject = "test";
$content = "Виталик";

// Initiate connection with the SMTP server
$handle = fsockopen($smtp_server, $port);
fputs($handle, "EHLO $mydomain\r\n");

// SMTP authorization
fputs($handle, "AUTH LOGIN\r\n");
fputs($handle, base64_encode($username)."\r\n");
fputs($handle, base64_encode($password)."\r\n");

// Send out the e-mail
fputs($handle, "MAIL FROM:<$sender>\r\n");
fputs($handle, "RCPT TO:<$recipient>\r\n");
fputs($handle, "DATA\r\n");
fputs($handle, "To: $recipient\r\n");
fputs($handle, "Subject: $subject\r\n");
fputs($handle, "$content\r\n");
fputs($handle, ".\r\n");

// Close connection to SMTP server
fputs($handle, "QUIT\r\n");
?>


  • 0

#6 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 19 Февраль 2009 - 10:22

У тебя точно не работает mail?
Попробуй ещё раз, скрипт отправки письма с вложением через mail() ниже.

Файл форм 1.php
<?php 
if(!empty($_POST))
{
// Обработчик HTML-формы
include "handler.php";
}
?>
<table>
<form enctype='multipart/form-data' method=post>
<tr><td width=50%>To:</td><td align=right><input type=text name=mail_to maxlength=32></td></tr>
<tr><td width=50%>Subject:</td><td align=right><input type=text name=mail_subject maxlength=64></td></tr>
<tr><td colspan=2>Сообщение:<br><textarea cols=50 rows=8 name=mail_msg></textarea></td></tr>
<tr><td width=50%>Photo:</td><td align=right><input type=file name=mail_file maxlength=64></td></tr>
<tr><td colspan=2><input type=submit value='Отправить'></td></tr>
</form>
</table>

Файл-обработчик(отправщик) handler.php
<?php
if(empty($_POST['mail_to'])) exit("Введите адрес получателя");
// проверяем правильности заполнения с помощью регулярного выражения
if (!preg_match("/^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}$/i", $_POST['mail_to']))
{
exit("Введите адрес в виде somebody@server.com");
}
$_POST['mail_to'] = htmlspecialchars(stripslashes($_POST['mail_to']));
$_POST['mail_subject'] = htmlspecialchars(stripslashes($_POST['mail_subject']));
$_POST['mail_msg'] = htmlspecialchars(stripslashes($_POST['mail_msg']));
$picture = "";
// Если поле выбора вложения не пустое - закачиваем его на сервер
if (!empty($_FILES['mail_file']['tmp_name']))
{
// Закачиваем файл
$path = $_FILES['mail_file']['name'];
if (copy($_FILES['mail_file']['tmp_name'], $path)) $picture = $path;
}
$thm = $_POST['mail_subject'];
$msg = $_POST['mail_msg'];
$mail_to = $_POST['mail_to'];
// Отправляем почтовое сообщение
if(empty($picture)) mail($mail_to, $thm, $msg);
else send_mail($mail_to, $thm, $msg, $picture);
// Вспомогательная функция для отправки почтового сообщения с вложением
function send_mail($to, $thm, $html, $path)
{
$fp = fopen($path,"r");
if (!$fp)
{
print "Файл $path не может быть прочитан";
exit();
}
$file = fread($fp, filesize($path));
fclose($fp);

$boundary = "--".md5(uniqid(time())); // генерируем разделитель
$headers .= "MIME-Version: 1.0\n";
$headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
$multipart .= "--$boundary\n";
$kod = 'koi8-r'; // или $kod = 'windows-1251';
$multipart .= "Content-Type: text/html; charset=$kod\n";
$multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
$multipart .= "$html\n\n";

$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 = \"".$path."\"\n\n";
$message_part .= chunk_split(base64_encode($file))."\n";
$multipart .= $message_part."--$boundary--\n";

if(!mail($to, $thm, $multipart, $headers))
{
exit("К сожалению, письмо не отправлено");
}
}
// Автоматический переход на главную страницу форума
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=".$_SERVER['PHP_SELF']."'>
</HEAD></HTML>";
?>

  • 0

#7 Alexanderrr777

Alexanderrr777
  • Пользователь
  • 3 сообщений
  • Репутация: 0

Отправлено 14 Декабрь 2009 - 15:22

Здраствуйте. Подскажите пожалуйста как доработать скрипт, что появилась возможость отправлять письмо с вложением..:

<?php 
$message_in_min = 10000;
$mode = $HTTP_POST_VARS['mode'];

switch($mode){
case 'send':
if(isset($HTTP_POST_FILES['filename']['tmp_name'])){
$base_name = $HTTP_POST_FILES['filename']['name'];
$f = fopen($HTTP_POST_FILES['filename']['tmp_name'],"rb");
$attach = base64_encode(fread($f,filesize($HTTP_POST_FILES['filename']['tmp_name'])));
$isfile = 1;
}
else {$isfile = 0;}
# Проверки ################################################## ###############
$from = $HTTP_POST_VARS['from'];
if(empty($from)){echo("Неуказан адрес отправителя");exit;}
else if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i",$from)){echo("$from - не верный адрес отправителя"); exit;}
$fromname = @$HTTP_POST_VARS['fromname'];
if(isset($fromname)){$from = $fromname." <$from>";}
$subject = $HTTP_POST_VARS['subject'];
$subject = htmlspecialchars(stripslashes($subject));
if(!$subject){echo("Опять же, кто будет писать тему сообщения?");}
$type = $HTTP_POST_VARS['type'];
$message = $HTTP_POST_VARS['message'];
if($type == 'text'){$message = htmlspecialchars(stripslashes($message));}
if(!$message){echo("Короче, нужно что то написать. Где сообщение-то?"); exit;}
################################################## ##########################
$to_arr = file(@$HTTP_POST_FILES['to']['tmp_name']);
// print_r($to_arr);exit;
$to_arr = array_unique($to_arr);
$i = 0;
$current_message= 0;
$num_send = 0;
$num_bad = 0;
$num_error= 0;
while(isset($to_arr[$i])){
$to_arr[$i] = trim($to_arr[$i]);
if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i",$to_arr[$i])){
echo($to_arr[$i].' - голимый адрес, я на его отправлять ничего не собираюсь'."<br>\n");
$num_bad++;
}
else{
if(sendemail($from,$to_arr[$i],$subject,$message,$type)){
echo('Сообщение на '.$to_arr[$i]." отправлено<br>\n"); flush();
$num_send++;
}
else{$num_error++;}
}
$current_message++;
if($current_message == $message_in_min){
$current_message = 0;
echo('Отправлено '.$message_in_min.' соообщений. Пауза 60 сек.'."<br>\n");
flush();
sleep(30);
echo('<!---->'."\n");
flush();
sleep(30);
}
$i++;
}
echo('<hr size="1" color="#000000">Рассылка завершена!<br>'."\n");
echo('
<b>Отправлено : '.$num_send.'</b>
<b>Ошибок связи: '.$num_error.'</b>
<b>Плохих email: '.$num_bad.'</b>
<hr size="1" color="#000000">
');
break;
default:
echo('
<div align="center">
<h1>Рассылка писем</h1>
<form method="post" enctype="multipart/form-data">
<table align="center" border="0">
<tr>
<td align="right" bgcolor="#EBEBEB"><strong>От кого (Имя):</strong></td>
<td><input type="Text" class="inp" name="fromname" value="" size="30"> * - Не обязательно. Например, Пупкин И.И.</td>
</tr>
<tr>
<td align="right" bgcolor="#EBEBEB"><strong>От кого (Email):</strong></td>
<td><input type="Text" class="inp" name="from" value="" size="30"> * - Только email адрес</td>
</tr>
<tr>
<td align="right" bgcolor="#EBEBEB"><strong>Кому:</strong></td>
<td><input type="File" name="to" class="inp" size="68"></td>
</tr>
<tr>
<td align="right" bgcolor="#EBEBEB"><strong>Тема:</strong></td>
<td><input type="Text" class="inp" name="subject" value="" size="80"></td>
</tr>
<tr>
<td valign="top" align="right" bgcolor="#EBEBEB"><strong>Сообщение:</strong></td>
<td><textarea name="message" rows="10" cols="82" class="inp"></textarea></td>
</tr>

<tr>
<td align="right" bgcolor="#EBEBEB"><strong>Формат</strong></td>
<td>

<table width="100%">
<tr>
<td width="20"><input class="inp" type="Radio" name="type" value="text" checked></td>
<td width="40">text </td>
<td width="20"><input class="inp" type="Radio" name="type" value="html"></td>
<td width="40">html</td>
<td align="right"><input type="Hidden" name="mode" value="send"><input type="Submit" class="inp" value="Отправить"></td>
</tr>
</table>

</td>
</tr>
<tr>
<td bgcolor="#EBEBEB"></td>
<td><hr size="3" color="#F7F7F7"></td>
</tr>
</table>
</form>
</div>
');
break;
}

function sendemail($from,$to,$subject,$message,$type){
$bound = time().'SPB';
global $attach, $base_name, $isfile;

$sep = chr(13).chr(10); // Разделитель строк заголовка
switch($type){
case 'text':
$headers = "From: ".$from.$sep;
$headers.= "X-Priority: 3".$sep;
$headers.= "X-MSMail-Priority: Normal".$sep;
$headers.= "X-Mailer: PHP/".phpversion().$sep;
$headers.= "MIME-Version: 1.0".$sep;
$headers.= "Content-Type: multipart/mixed; boundary=\"".$bound."\"".$sep.$sep;

$body = "--$bound".$sep;
$body.= "Content-type: text/plain; charset=\"windows-1251\"".$sep;
$body.= "Content-Transfer-Encoding: 8bit".$sep.$sep;
$body.= $message.$sep;

if($isfile == 1){
$body.= "$sep$sep--$bound".$sep;
$body.= "Content-Type: application/octet-stream;";
$body.= "name=\"".basename($base_name)."\"".$sep;
$body.= "Content-Transfer-Encoding:base64".$sep;
$body.= "Content-Disposition:attachment".$sep.$sep;
$body.= $attach.$sep;
}
// $body.="$bound--".$sep.$sep;
break;
case 'html':
$headers = "From: ".$from.$sep;
$headers.= "X-Priority: 3".$sep;
$headers.= "X-MSMail-Priority: Normal".$sep;
$headers.= "X-Mailer: PHP/".phpversion().$sep;
$headers.= "MIME-Version: 1.0".$sep;
$headers.= "Content-Type: multipart/mixed; boundary=\"".$bound."\"".$sep.$sep;

$body = "--$bound".$sep;
$body.= "Content-type: text/html; charset=\"windows-1251\"".$sep;
$body.= "Content-Transfer-Encoding: 8bit".$sep.$sep;
$body.= $message.$sep;

if($isfile == 1){
$body.= "$sep$sep--$bound".$sep;
$body.= "Content-Type: application/octet-stream;";
$body.= "name=\"".basename($base_name)."\"".$sep;
$body.= "Content-Transfer-Encoding:base64".$sep;
$body.= "Content-Disposition:attachment".$sep.$sep;
$body.= $attach.$sep;
}
// $body.="$bound--".$sep.$sep;
break;
default:
echo('<center><b>Неверный параметр типа письма.</b></center>');
break;
}
if(mail($to,$subject,$body,$headers)){return true;}
else{return false;}
}
?>

  • 0

#8 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 14 Декабрь 2009 - 21:05

Alexanderrr777,

	$boundary = "--".md5(uniqid(time())); // генерируем разделитель 
$headers .= "MIME-Version: 1.0\n";
$headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n"; // сообщаем, что передаём сообщение с вложением (может быть разное вложение), указываем разделитель
$multipart .= "--$boundary\n"; // вставляем в заголовки разделитель
$kod = 'koi8-r'; // или $kod = 'windows-1251';
$multipart .= "Content-Type: text/html; charset=$kod\n"; // вставляем в заголовки кодировку
$multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n"; // сообщает что нужно закодировать при пересылке
$multipart .= "$html\n\n"; // сообщение письма

$message_part = "--$boundary\n"; // вставляем в сообщение разделитель
$message_part .= "Content-Type: application/octet-stream\n"; // сообщаем тип контента
$message_part .= "Content-Transfer-Encoding: base64\n"; // сообщаем, что строка закодирована по алгоритму base64
$message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n\n"; // имя файла вложения
$message_part .= chunk_split(base64_encode($file))."\n"; // кодируем вложение base64 и делим строку для вставки \r\n
$multipart .= $message_part."--$boundary--\n"; // вставляем разделитель


Не люблю копаться в чужом коде, особенно когда не соблюдают простейшие правила форума. Для каждого вопроса своя тема.
Я прокомментировал каждую строку для составления письма с вложением.

И вообще вы сами пытались разобраться в том что написали?
Вот это:
	   $body.= "$sep$sep--$bound".$sep; 
$body.= "Content-Type: application/octet-stream;";
$body.= "name=\"".basename($base_name)."\"".$sep;
$body.= "Content-Transfer-Encoding:base64".$sep;
$body.= "Content-Disposition:attachment".$sep.$sep;
$body.= $attach.$sep;

Совсем не то, что:
	$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 = \"".$path."\"\n\n";
$message_part .= chunk_split(base64_encode($file))."\n";
$multipart .= $message_part."--$boundary--\n";

  • 0

#9 Alexanderrr777

Alexanderrr777
  • Пользователь
  • 3 сообщений
  • Репутация: 0

Отправлено 14 Декабрь 2009 - 21:54

Извините, что написал здесь, просто не получилось создать новую тему, недостаточно прав, хотя активировал ааккаунт с ящика..Этот скрипт нашел в интернете, мне он показался наиболее удобным из всех перепробаванных. В PHP я только начанаю, поэтому пока туговато с этим скриптом. А как мне добавить еще строку "Прикрепить файл"?. Спасибо
  • 0

#10 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 14 Декабрь 2009 - 22:42

Alexanderrr777,

Извините, что написал здесь, просто не получилось создать новую тему, недостаточно прав, хотя активировал ааккаунт с ящика..

Читаем, вверху красным написано, что собственные темы можно создавать после 10 информативных сообщений.

Для отправки через форму файлов на сервер используется тег input типа file:
<input type="file" name="my_file" />

Так же надо не забывать указывать метод POST и сообщать что форма содержит не только текстовые данные.
<form method="post" enctype="multipart/form-data">


Далее на стороне сервера нам надо прочитать полученный файл для отправки
// проверка, что файл загружен методом HTTP POST.
if ( is_uploaded_file($_FILES['my_file']['tmp_name'] )
{
$path = $_FILES['my_file']['tmp_name']; // путь до временного файла, который отправляем
$fp = fopen($path, "r"); // открываем файл на чтение
// если по каким либо причинам файл не удалось открыть на чтение (получить файловый дескриптор)
if ( !$fp )
{
print "Файл $path не может быть прочитан";
exit();
}

// если временный файл файл был открыт
$file = fread($fp, filesize($path)); // считываем из файла данные с начала длиной filesize($path) (то есть весь файл)
fclose($fp); // закрываем файл
}

Далее эту переменную $file нам надо передать в письмо, как и показано в моём скрипте.
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru