Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
1 / 1 / 0
Регистрация: 30.03.2020
Сообщений: 22
1

Отправка письма

14.01.2021, 18:50. Просмотров 412. Ответов 5

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  <title>Отправка письма с вложением</title>
  <link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet">
  <style>
        body,html{height:100%}body{display:flex;justify-content:center;align-items:center;background-color:#222;color:#fff;font-size:16px;font-family:'Open Sans',sans-serif}.box{width:100%;max-width:400px}.form-group label{display:block;margin-bottom:6px}.form-group input,.form-group textarea{width:calc(100% - 24px);font-size:16px;padding:6px 12px}.form-group{margin-bottom:15px}.form-group textarea{resize:none}.control-file input[type="file"]{font-size:16px;display:block;margin-top:7px}.control-file{margin-bottom:20px}.box button{display:block;width:100%;background-color:#fff;color:#222;font-size:16px;font-family:'Open Sans',sans-serif;border:1px solid #fff;padding:6px 0;transition:.2s}.box button:hover{background-color:#222;color:#fff}.box button:focus{outline:none}
  </style>
</head>
 
<body>
    <div class="box">
        <form id="ajax-contact-form" enctype="multipart/form-data" method="post">
          <div class="form-group">
            <label for="nameFF">Имя:</label>
            <input id="nameFF" name="nameFF" type="text" required>
          </div>
          <div class="form-group">
            <label for="contactFF">E-mail:</label>
            <input id="contactFF" name="contactFF" type="email" required>
          </div>
          <div class="form-group">
            <label for="telFF">Телефон:</label>
            <input id="telFF" name="telFF" type="tel" required>
          </div>
          <div class="form-group">
            <label for="projectFF">Сообщение</label>
            <textarea id="projectFF" name="projectFF" cols="40" rows="3"></textarea>
          </div>
          <div class="control-file">
            <label for="fileFF">Прикрепить файл:</label>
            <input id="fileFF" name="fileFF" type="file">
          </div>
          <button class="btn" type="submit" id="submitFF">Отправить сообщение</button>
        </form>
    </div>
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <script src="script.js"></script>
 
 
 
</body>
 
</html>
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
if (isset ($_POST['contactFF'])) {
  $to = "моя почта";
  $from = "Другая почта";
  $subject = "Заполнена контактная форма на сайте ".$_SERVER['HTTP_REFERER'];
  $message = "Имя пользователя: ".$_POST['nameFF']."\nEmail пользователя ".$_POST['contactFF']."\nТелефон пользователя ".$_POST['telFF']."\nСообщение: ".$_POST['projectFF']."\n\nАдрес сайта: ".$_SERVER['HTTP_REFERER'];
 
  $boundary = md5(date('r', time()));
  $filesize = '';
  $headers = "MIME-Version: 1.0\r\n";
  $headers .= "From: " . $from . "\r\n";
  $headers .= "Reply-To: " . $from . "\r\n";
  $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
  $message="
Content-Type: multipart/mixed; boundary=\"$boundary\"
 
--$boundary
Content-Type: text/plain; charset=\"utf-8\"
Content-Transfer-Encoding: 7bit
 
$message";
     if(is_uploaded_file($_FILES['fileFF']['tmp_name'])) {
         $attachment = chunk_split(base64_encode(file_get_contents($_FILES['fileFF']['tmp_name'])));
         $filename = $_FILES['fileFF']['name'];
         $filetype = $_FILES['fileFF']['type'];
         $filesize = $_FILES['fileFF']['size'];
         $message.="
 
--$boundary
Content-Type: \"$filetype\"; name=\"$filename\"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=\"$filename\"
 
$attachment";
     }
   $message.="
--$boundary--";
 
  if ($filesize < 10000000) { // проверка на общий размер всех файлов. Многие почтовые сервисы не принимают вложения больше 10 МБ
    mail($to, $subject, $message, $headers);
    echo $_POST['nameFF'].', Ваше сообщение отправлено, спасибо!';
  } else {
    echo 'Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.';
  }
}
 
header('Access-Control-Allow-Origin: *');
echo $_SERVER['REMOTE_ADDR'];
?>
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$(function() {
  document.getElementById('ajax-contact-form').addEventListener('submit', function(evt){
    var http = new XMLHttpRequest(), f = this;
    var th = $(this);
    evt.preventDefault();
    http.open("POST", "contact.php", true);
    http.onreadystatechange = function() {
      if (http.readyState == 4 && http.status == 200) {
        alert(http.responseText);
        if (http.responseText.indexOf(f.nameFF.value) == 0) { // очистить поля формы, если в ответе первым словом будет имя отправителя (nameFF)
          th.trigger("reset");
        }
      }
    }
    http.onerror = function() {
      alert('Ошибка, попробуйте еще раз');
    }
    http.send(new FormData(f));
  }, false);
 
});
Сначала была ошибка, потом на этом же форуме нашел ответ, что надо через OpenServer запускать.

Запустил, пишет что письмо отправлено, но нет, оно не пришло, ждал какое-то время, так и не пришло. Пытался найти ошибку, но не смог
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2021, 18:50
Ответы с готовыми решениями:

Отправка письма php. Письма со скрипта на локальном сервере (Denwer) не приходят на почту.
Доброго Времени Суток!!! Я запускаю Денвером php скрипт со следующим кодом &lt;?php $name=$_GET;...

Отправка письма
добрый вечер, нужна помощь есть сайт на хостинге timeweb, через панель управления создал ящик...

Отправка письма
Всем привет! есть файл с кодом: &lt;?php function selfurl() { $s =...

Отправка письма
$from = 'admin@site.ru'; $subject = &quot;Регистрация на сайте site.ru&quot;; $message...

5
156 / 102 / 50
Регистрация: 18.05.2014
Сообщений: 226
14.01.2021, 19:16 2
В openserver по умолчанию(если сервер не настроен должным образом) отправленные письма сохраняются в виде текстовых документов на виртуальном диске по пути типа W:\userdata\temp\email, путь можно посмотреть в настройках во вкладке почта. При условии что код рабочий.
Если нужно именно на почтовый ящик отправлять, на той же вкладке указываем например гуголовский smtp сервер(для владельцев гугл аккаунтов доступна такая функция), порт, логин, пароль пользователя гугла, почту, от имени которой будет приходить письмо, если надо шифрование, в процессе немного подкручиваем гугл аккаунт(в настройках к нему предоставляем доступ к сторонним непроверенным приложениям, как то так там этот пункт называется), и все.
ps яндекс тоже вроде такую услугу предоставляет
1
1 / 1 / 0
Регистрация: 30.03.2020
Сообщений: 22
14.01.2021, 19:33  [ТС] 3
Цитата Сообщение от dontknow Посмотреть сообщение
отправленные письма сохраняются в виде текстовых документов на виртуальном диске по пути типа W:\userdata\temp\email, путь можно посмотреть в настройках во вкладке почта.
Я кидаю на яндекс, там нет такого

Цитата Сообщение от dontknow Посмотреть сообщение
При условии что код рабочий.
Возможно код не работает, но ошибку не выдает, не терминал, не проверка в коде
0
156 / 102 / 50
Регистрация: 18.05.2014
Сообщений: 226
14.01.2021, 22:37 4
код рабочий плюс минус
Цитата Сообщение от Ликой Посмотреть сообщение
Я кидаю на яндекс, там нет такого
ну канешно
Идем сюда, читаем
шаг 2, исходящая почта
Кликните здесь для просмотра всего текста

адрес почтового сервера — smtp.yandex.ru;
защита соединения — SSL;
порт — 465.
Для доступа к почтовому серверу укажите ваш логин и пароль на Яндексе или пароль приложения. Используйте тот пароль, который вы включили в настройках Яндекс.Почты.Если вы настраиваете получение почты с ящика вида «login@yandex.ru», логином является часть адреса до знака «@».


открываем настройки openserver, вкладка почта
1. способ отправки почты - отправлять через удаленный smtp сервер
2. SMTP сервер - smtp.yandex.ru
3. порт- 465
4. имя пользователя - MyYandexMail@yandex.ru (MyYandexMail@yandex.ru тоже будет работать)
5. пароль - пароль приложения (см ниже)
6. email отправителя - MyYandexMail@yandex.ru
7. шифрование - авто

Возвращаемся к яндексу, идем сюда, Разрешить доступ к почтовому ящику с помощью почтовых клиентов
жмяк галочка 1 С сервера imap.yandex.ru по протоколу IMAP
жмяк галочка 2 Пароли приложений и OAuth-токены

Получаем пароль приложения, идем в настройки профиля,
Пароли и авторизация, Пароли приложений, создаем пароль для почты, обзываем его как хотим, копируем, вставляем в настройки опенсервера, как указано выше.

Далее разбираем код файла contact.php
PHP
3
$to = "моя почта";
тут должен быть реальный почтовый ящик, на него и придет наше письмо, либо получаем это значение из формы, либо просто прописываем в коде для тестирования
PHP
3
$to = "MyYandexMail@yandex.ru"; //например
Кликните здесь для просмотра всего текста
если все сделано правильно, наслаждаемся приходящими нам письмами, потом ломаем голову почему в них ахалай махалай и не приходят файлы (вероятно проблема с заголовками)
1
Миниатюры
Отправка письма  
1 / 1 / 0
Регистрация: 30.03.2020
Сообщений: 22
15.01.2021, 10:52  [ТС] 5
Цитата Сообщение от dontknow Посмотреть сообщение
тут должен быть реальный почтовый ящик, на него и придет наше письмо, либо получаем это значение из формы, либо просто прописываем в коде для тестирования
Она там стоит

После того как прописал все указанное на фото, перестало работать:

"fatal error maximum execution time of 60 seconds exceeded in contact.php"

Contact.php подключен, проверил пытаясь избавится от этой ошибки, получил новую:

"parse error syntax error unexpected "="

Это про эту строчку:
PHP
1
max_execution_time = "3600";
Добавлено через 5 минут
Цитата Сообщение от Ликой Посмотреть сообщение
max_execution_time = "3600";
Понял ошибку, исправил, но теперь опять то что было
0
156 / 102 / 50
Регистрация: 18.05.2014
Сообщений: 226
15.01.2021, 22:47 6
мб что то в процессе настройки опенсервера/аккаунта яндекса пропущено, что в логах? (пкм на значок в трее - просмотр логов - почта)
также для начала лучше на коде попроще пробовать
PHP
1
2
3
4
$headers= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
if(mail('MyMail@mail.com', 'Тема письма', 'Текст письма', $headers))
echo 'message sended!';
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2021, 22:47

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

отправка письма
создал на сайте форму для отправки почты на мыло...письмо приходит, но вот не корректные данные :...

Отправка письма
Имеется код &lt;? session_start(); error_reporting(0); ?&gt;&lt;!DOCTYPE html&gt; &lt;html&gt;&lt;head&gt; &lt;?php $title...

Отправка письма
Скрипт должен брать текст из textarea вставлять в письмо и присылать на ящик, но приходит только...

отправка письма
Здравствуйте, при отправки письма с формы, столкнулся с такой ситуацией. Первая проблема в том...

Отправка на почту письма
ребята нужен скрипт для отправки письма на почту. всего 2 поля для заполнения ваше имя и ваш...

Отправка письма с сайта
Добрый день! Подскажите где допустил ошибку,дело в том что при отправке письма с сайта,на почту...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.