отправка письма на почту (php)
Нужно сделать отправку письма на почту ( с вложениями), но возникли некоторые вопросы.
1. какой SMPT сервер использует функция mail. 2. какие есть удобные либы для отправки почты. 3. как нужно проверять строки передаваемые в пхп, перед отправкой на почту (в базу нечего не пишет, sql иньекция исключаеться). |
1. зависит от настроек сервака
2. mail) |
Цитата:
|
danik.js, animhotep, спасибо.
не могу понять почему не работает
$subject = htmlspecialchars($_POST["subject"]);
$backMAil = htmlspecialchars($_POST["user_mail"]);
if(!$subject || !$backMAil) {
header("Status: 400 Неверный запрос");
exit();
}
|
Цитата:
|
danik.js, должно возвращать статус 400 в заголовке, если переданы пустые строки в обход проверки в браузере, но выдает ошибку .
Цитата:
|
все разобрался, open server какого то хрена сбросил настройки php.ini
|
еще вопрос про отправку файлов. файл загруженный через форму находяться в temp папке на сервере пока не выполниться пхп скрипт (я прав?) , и что бы получить этот файл для отпарвки нужно сделать
fopen($_FILES[$filename]["tmp_name"]) и уже потом работать с файлом? |
Че ты с файлом делать собрался?
|
Цитата:
|
вот код
<?php
$boundary = md5(uniqid(time()));
$mail = "mail";
if(empty($_POST["subject"])
|| empty($_POST["user_mail"])) {
http_response_code(400);
}
$subject = htmlspecialchars($_POST["subject"]);
$backMail = htmlspecialchars($_POST["user_mail"]);
$html = "<html><head></head> <body>" ;
$html .= "Email пользователь:<a href='mailto:{$backMail}'> {$backMail}</a>";
if($_POST["message-text"]) {
$messageText = htmlspecialchars($_POST["message-text"]);
$html .= "<p>Сообщение пользоавателя: </p>" .$messageText;
}
$html .= "</body></html>";
$header = "FROM: 'Online book feeback' <{$mail}> \n";
$header .= "TO: {$mail} \n";
$header .= "Subject: {$subject} \n";
$header .= "Mime-Version: 1.0 \n";
$header .= "Content-Type: multipart/mixed; boundary='{$boundary}'";
$body = "\n--{$boundary}";
$body .= "Content-Type: text/plain; charset='windows-1251' \n";
$body .= "Content-Transfer-Encoding: quoted-printable \n";
$body .= $html;
if(count($_FILES) > 0) {
foreach ($_FILES as $name => $file) {
if(!$file["size"]) continue;
$file = fopen($file["tmp_name"], "rb");
$body .= "\n--{$boundary}";
$body .= "Content-Type: application/octet-stream;";
$body .= "name=".basename($name)."\n";
$body .= "Content-Transfer-Encoding:base64 \n";
$body .= "Content-Disposition:attachmentn \n";
$body .= base64_encode(fread($file, filesize($file["tmp_name"]))); // вот тут ошибка, пока не понял почему
//Warning: fread(): Length parameter must be greater than 0 in E:\OpenServer\domains\localhost\test\sendMail.php on line 48
}
}
$body .= "{$boundary}--";
if(mail($mail, $subject, $body, $header)){
echo "Письмо успешно отправлено";
}
else {
http_response_code(400);
}
?>
|
Цитата:
Цитата:
|
Цитата:
|
всеравно не работает, почему на почту приходит пустое письмо??
что я не так сделал?
<?php
$boundary = md5(uniqid(time()));
$mail = "mail";
if(empty($_POST["subject"])
|| empty($_POST["user_mail"])) {
http_response_code(400);
}
$subject = htmlspecialchars($_POST["subject"]);
$backMail = htmlspecialchars($_POST["user_mail"]);
$html = "<html><head></head> <body>" ;
$html .= "Email пользователь:<a href='mailto:{$backMail}'> {$backMail}</a>";
if($_POST["message-text"]) {
$messageText = htmlspecialchars($_POST["message-text"]);
$html .= "<p>Сообщение пользоавателя: </p>" .$messageText;
}
$html .= "</body></html>";
$header = "FROM: 'Online book feeback' <{$mail}> \n";
$header .= "TO: {$mail} \n";
$header .= "Subject: {$subject} \n";
$header .= "Mime-Version: 1.0 \n";
$header .= "Content-Type: multipart/mixed; boundary='{$boundary}' \n";
$body = "--{$boundary} \n";
$body .= "Content-Type: text/html; charset='utf-8' \n";
$body .= "Content-Transfer-Encoding: quoted-printable \n";
$body .= $html;
if(count($_FILES) > 0) {
foreach ($_FILES as $name => $file) {
if(!$file["size"]) continue;
$fopn = fopen($file["tmp_name"], "rb");
$body .= "--{$boundary}\n";
$body .= "Content-Type: application/octet-stream; \n";
$body .= "name=".basename($name)."\n";
$body .= "Content-Transfer-Encoding:base64 \n";
$body .= "Content-Disposition:attachment \n";
$body .= base64_encode(fread($fopn, filesize($file["tmp_name"])));
}
}
$body .= "{$boundary}--";
if(mail($mail, $subject, $body, $header)){
echo "Письмо успешно отправлено";
}
else {
http_response_code(400);
}
?>
|
хз, подключи либу какую-нибудь для mail'инга, чтоб не возиться с этим "низкоуровневым" барахлом.
|
Цитата:
|
Цитата:
Помню что тоже нужна была. Так я загуглил, взял первую попавшуюся и был доволен как слон :) К слову файлы тоже аттачил. |
Короче, глянул - PHPMailer юзал я.
Цитата:
|
Цитата:
|
Не атачь мозг. Юзай и качай исходники . И надо если дорабатывй
|
почему не работает??
require 'PhpMailer/PHPMailerAutoload.php';
$mail = new PHPMailer;
$site_mail = "admin@lol.com";
if(empty($_POST["subject"])
|| empty($_POST["user_mail"])) {
http_response_code(400);
}
$backMail = htmlspecialchars($_POST["user_mail"]);
$subject = htmlspecialchars($_POST["subject"]);
$mail->From = $site_mail;
$mail->FromName = $backMail;
$mail->addAddress($site_mail, $subject); // Add a recipient
$mail->addReplyTo('no-reply');
// $html = "<html><head></head> <body>" ;
$html = "Email пользователь:<a href='mailto:{$backMail}'> {$backMail}</a>";
if($_POST["message-text"]) {
$messageText = htmlspecialchars($_POST["message-text"]);
$html .= "<p>Сообщение пользоавателя: </p>" .$messageText;
}
// $html .= "</body></html>";
$mail->Subject = $subject;
$mail->Body = $html;
$mail->isHTML(true);
$mail->CharSet = 'UTF-8';
if(count($_FILES) > 0) {
foreach ($_FILES as $name => $file) {
if(!$file["size"]) continue;
$mail->addAttachment($file["tmp_name"], $file["name"]);
}
}
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
exit;
}
echo 'Message has been sent';
|
Цитата:
|
Цитата:
|
Конечно предназначен. Вы задали вопрос, вам задали вопрос - пользуемся.
Вам не надо отправлять почту, иначе бы давно уже сделали. Понимать там ровным счетом нечего. Почта ходит стопицот лет уже. |
kostyanet, по сути я уже до пилил рабочий вариант, но осталась одна проблема почта приходит не вся, и через долгое время, но я так понимаю это уже не скрипт, а почтовый сервер хостинга? просто пока тестирую на бесплатно аккаунте хостинга.
|
Цитата:
|
| Часовой пояс GMT +3, время: 14:18. |