Помощник
|
Как сделать отправку почты если не работает mail() |
autotype
|
Сообщение
#1
|
||
|
|
||
|
|||
ZiTosS |
18.2.2009, 18:20;
Ответить: ZiTosS
Сообщение
#2
|
|
SMTP или же sendMail и подобные
|
|
|
autotype
|
Сообщение
#3
|
|
ну SMTP то там есть, но возникли проблемы с настройкой, не поможеш? может стыкался
|
|
|
ZiTosS |
18.2.2009, 23:11;
Ответить: ZiTosS
Сообщение
#4
|
|
Что именно не получается? Пиши, я думаю вместе разберемся.
|
|
|
autotype
|
Сообщение
#5
|
|
сделал, нашол подходящий скрипт правда один только и заработал, через сокет с smtp но нужно вложить файл для отправки как сделать?
скрипт на всяк случай [php]<?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"); ?>[/php] |
|
|
ZiTosS |
19.2.2009, 11:22;
Ответить: ZiTosS
Сообщение
#6
|
|
У тебя точно не работает 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]<?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>"; ?>[/php] |
|
|
Alexanderrr777 |
14.12.2009, 16:22;
Ответить: Alexanderrr777
Сообщение
#7
|
|
Здраствуйте. Подскажите пожалуйста как доработать скрипт, что появилась возможость отправлять письмо с вложением..:
[php]<?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;} } ?>[/php] |
|
|
ZiTosS |
14.12.2009, 22:05;
Ответить: ZiTosS
Сообщение
#8
|
|
Alexanderrr777,
[php] $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"; // вставляем разделитель[/php] Не люблю копаться в чужом коде, особенно когда не соблюдают простейшие правила форума. Для каждого вопроса своя тема. Я прокомментировал каждую строку для составления письма с вложением. И вообще вы сами пытались разобраться в том что написали? Вот это: [php] $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;[/php] Совсем не то, что: [php] $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";[/php] Поблагодарили: (0) |
|
|
Alexanderrr777 |
14.12.2009, 22:54;
Ответить: Alexanderrr777
Сообщение
#9
|
|
Извините, что написал здесь, просто не получилось создать новую тему, недостаточно прав, хотя активировал ааккаунт с ящика..Этот скрипт нашел в интернете, мне он показался наиболее удобным из всех перепробаванных. В PHP я только начанаю, поэтому пока туговато с этим скриптом. А как мне добавить еще строку "Прикрепить файл"?. Спасибо
|
|
|
ZiTosS |
14.12.2009, 23:42;
Ответить: ZiTosS
Сообщение
#10
|
|
Alexanderrr777,
Извините, что написал здесь, просто не получилось создать новую тему, недостаточно прав, хотя активировал ааккаунт с ящика.. Читаем, вверху красным написано, что собственные темы можно создавать после 10 информативных сообщений. Для отправки через форму файлов на сервер используется тег input типа file: <input type="file" name="my_file" /> Так же надо не забывать указывать метод POST и сообщать что форма содержит не только текстовые данные. <form method="post" enctype="multipart/form-data"> Далее на стороне сервера нам надо прочитать полученный файл для отправки [php]// проверка, что файл загружен методом 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); // закрываем файл }[/php] Далее эту переменную $file нам надо передать в письмо, как и показано в моём скрипте. Поблагодарили: (0) |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Арбитражники, как ведете учет расходов и доходов? | 11 | Boymaster | 1798 | 17.4.2024, 23:35 автор: Boymaster |
|
Как вывести деньги в Украине с заблокированного Юмани ? | 29 | freeax | 4806 | 17.4.2024, 1:19 автор: sergio11 |
|
Если в сайт с одними ключами, которые там долго, добавить новую рубрику с новыми ключами | 2 | Tutich | 1199 | 16.4.2024, 8:27 автор: Tutich |
|
Как вы отдыхаете от работы за компом | 148 | adw-kupon.ru | 19706 | 8.4.2024, 10:37 автор: Skyworker |
|
Как вы бросили работу и перешли на заработок с сайтов? | 18 | uahomka | 3099 | 5.4.2024, 5:53 автор: Skyworker |
Текстовая версия | Сейчас: 19.4.2024, 8:25 |