0 / 0 / 0
Регистрация: 22.06.2014
Сообщений: 2

Массовая отправка сообщений с вложением через SMTP сервер

22.06.2014, 11:02. Показов 2639. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Ребят, подскажите пожалуйста, в чем ошибка? Есть самописные форма и обработчик формы для массовой отправки почты с вложением. Данные адресата для отправки (ФИО, адрес) берутся из таблицы БД MySQL, сама отправка отдельно для каждого адресата, в цикле. При проверке выводит ошибку: Parse error: syntax error, unexpected ';', expecting '{' in E:\Rooms\u388944\itautosystems.ru\www\ph ps\postmail.php on line 157

Я в этом деле новичок, и уже прилично запарился с этим скриптом..подскажите пожалуйста, как исправить ошибку? Пробовал по-разному...всё не то. Почему-то просит на 157 строку скобку. Заранее благодарю всех, кто сможет помочь.
Ниже прилагаю код:

PHP/HTML
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
<?php 
 
/* Переменные для соединения с базой данных */ 
 
$hostname = "1.mysql.host.ru"; 
 
$username = "login"; 
 
$password = "password"; 
 
$dbName = "1"; 
 
/* Таблица MySQL, в которой хранятся данные */ 
 
$userstable = "Table"; 
 
/* Создать соединение */ 
 
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); 
 
/* Выбрать базу данных. Если произойдет ошибка - вывести ее */ 
   mysql_select_db($dbName) or die(mysql_error()); 
/* Составить запрос для выборки данных из таблицы */ 
   $query ="SELECT * FROM $userstable";
/* Выполнить запрос. Если произойдет ошибка - вывести ее. */
   $result=mysql_query($query) or die(mysql_error());
   $current_rec = mysql_fetch_array($result) ;
   do {
   $i = $current_rec['id'];
   $Abon[$i]['Familia'] = $current_rec['Familia'];
   $Abon[$i]['name_fk'] = $current_rec['name_fk'];
   $Abon[$i]['Otchestvo'] = $current_rec['Otchestvo'];
   $Abon[$i]['EMAIL'] = $current_rec['EMAIL'];
   }
   while ($current_rec = mysql_fetch_array($result)); 
 
/* Переменные для отправки через SMTP-сервер  */
 
 $mhSmtpMail_Server     = "smtp.host.ru";      // Укажите адрес SMTP-сервера
 
 $mhSmtpMail_Port       = "25";                    // Порт SMTP-сервера
 
 $mhSmtpMail_Username   = "name@domen.ru"; // Имя почтового ящика (пользователя)
 
 $mhSmtpMail_Password   = "password2";                // и пароль к нему
 
 $mhSmtpMail_From       = "Name";               // Имя отправителя в поле From
 
  function MailSmtp($mail_to, $subject, $message, $headers)
{   
  global $mhSmtpMail_Server, $mhSmtpMail_Port, $mhSmtpMail_Username, $mhSmtpMail_Password;
 
 
  $mhSmtpMail_localhost  = "localhost";
  $mhSmtpMail_newline    = "\r\n";
  $mhSmtpMail_timeout    = "30";
 
  $smtpConnect = fsockopen($mhSmtpMail_Server, $mhSmtpMail_Port, $errno, $errstr, $mhSmtpMail_timeout);
 
  $smtpResponse = fgets($smtpConnect, 515);
 
  if(empty($smtpConnect))
    {
      $output = "Failed to connect: $smtpResponse";
 
      return $output;
    }
  else
    {
      $logArray['connection'] = "Connected: $smtpResponse";
    }
    
  fputs($smtpConnect, "HELO $mhSmtpMail_localhost" . $mhSmtpMail_newline);
  $smtpResponse = fgets($smtpConnect, 515);
  $logArray['heloresponse'] = "$smtpResponse";
 
  fputs($smtpConnect,"AUTH LOGIN" . $mhSmtpMail_newline);
  $smtpResponse = fgets($smtpConnect, 515);
  $logArray['authrequest'] = "$smtpResponse";
 
  fputs($smtpConnect, base64_encode($mhSmtpMail_Username) . $mhSmtpMail_newline);
  $smtpResponse = fgets($smtpConnect, 515);
  $logArray['authmhSmtpMail_username'] = "$smtpResponse";
 
  fputs($smtpConnect, base64_encode($mhSmtpMail_Password) . $mhSmtpMail_newline);
  $smtpResponse = fgets($smtpConnect, 515);
  $logArray['authmhSmtpMail_password'] = "$smtpResponse";
 
  fputs($smtpConnect, "MAIL FROM: $mhSmtpMail_Username" . $mhSmtpMail_newline);
  $smtpResponse = fgets($smtpConnect, 515);
  $logArray['mailmhSmtpMail_fromresponse'] = "$smtpResponse";
 
 fputs($smtpConnect, "RCPT TO: $mail_to" . $mhSmtpMail_newline);
 $smtpResponse = fgets($smtpConnect, 515);
  $logArray['mailtoresponse'] = "$smtpResponse";
 
  fputs($smtpConnect, "DATA" . $mhSmtpMail_newline);
  $smtpResponse = fgets($smtpConnect, 515);
  $logArray['data1response'] = "$smtpResponse";
 
 fputs($smtpConnect, "Subject: $subject\r\n$headers\r\n\r\n$message\r\n.\r\n");
 $smtpResponse = fgets($smtpConnect, 515);
  $logArray['data2response'] = "$smtpResponse";
  
  /* Если поле выбора вложения не пустое - закачиваем его на сервер */
  if (!empty($_FILES['mail_file']['tmp_name'])) 
  { 
/* Закачиваем файл */
    $path = $_FILES['mail_file']['name']; 
   if (copy($_FILES['mail_file']['tmp_name'], $path)) $file = $path; 
  } 
 
  if ($path) {  
    $fp = fopen($path,"rb");   
    if (!$fp)   
    { print "Cannot open file";   
     exit();   
    }   
    $file = fread($fp, filesize($path));   
   fclose($fp);   
    }  
    $name = "1.doc"; // в этой переменной надо сформировать имя файла (без всякого пути)  
    $EOL = "\r\n"; // ограничитель строк, некоторые почтовые сервера требуют \n - подобрать опытным путём
    $boundary     = "--".md5(uniqid(time()));  // любая строка, которой не будет ниже в потоке данных.  
    $headers    = "MIME-Version: 1.0;$EOL";   
    $headers   .= "Content-Type: multipart/mixed; boundary=\"$boundary\"$EOL";  
    $headers   .= "From: $mhSmtpMail_Username";  
      
    $multipart  = "--$boundary$EOL";   
    $multipart .= "Content-Type: text/html; charset=windows-1251$EOL";   
    $multipart .= "Content-Transfer-Encoding: base64$EOL";   
    $multipart .= $EOL; // раздел между заголовками и телом html-части 
    $multipart .= chunk_split(base64_encode($html));   
 
    $multipart .=  "$EOL--$boundary$EOL";   
    $multipart .= "Content-Type: application/octet-stream; name=\"$name\"$EOL";   
    $multipart .= "Content-Transfer-Encoding: base64$EOL";   
    $multipart .= "Content-Disposition: attachment; filename=\"$name\"$EOL";   
    $multipart .= $EOL; // раздел между заголовками и телом прикрепленного файла 
    $multipart .= chunk_split(base64_encode($file));   
 
    $multipart .= "$EOL--$boundary--$EOL";   
 
  fputs($smtpConnect,"QUIT" . $mhSmtpMail_newline);
  $smtpResponse = fgets($smtpConnect, 515);
  $logArray['quitresponse'] = "$smtpResponse";
} 
 
/* Цикл отправки */   
  $subject = $_POST['subject'];
 
  for($i=1;$i<4;$i++)
{
  $mail_to = $Abon[$i]['EMAIL'];
  $message =" Уважаемый пользователь" .$Abon[$i]['Familia'].''.$Abon[$i]['Name_fm'].''.$Abon[$i]['Otchestvo']. 
  ", пожалуйста, прочтите внимательно файл, приложенный к письму."; 
  function MailSmtp($mail_to, $subject, $message, $headers);
  sleep(1);
} 
if(!MailSmtp($mail_to, $subject, $message, $headers))  
{return False;           /* если письма не отправлены */
    echo "<CENTER>"; 
    echo "Сообщения не отправлены.<BR><BR>";
    echo "</CENTER>";
}  
else {                   /* если письма отправлены */
    echo "<CENTER>";
   echo "Сообщения отправлены.<BR><BR>";
    echo "</CENTER>"; 
return True;  
}  
/* Закрыть соединение */ 
 
mysql_close(); 
 
?>
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.06.2014, 11:02
Ответы с готовыми решениями:

Отправка писем с вложением через smtp протокол
Есть следующий код:int bmpsize (char* name) { FILE* f = fopen (name, &quot;rb&quot;); int i = 0; for (; fgetc (f) != EOF; i++) {} ...

Отправка сообщений через SMTP
В программа работает но сообщения на мыло не приходят. В чем ошибка? Как ее исправить? using System; using...

Отправка сообщений на почту через SMTP
Здрасте! сам код: using System; using System.Data; using System.Configuration; using System.Web; using...

5
 Аватар для Voka
207 / 199 / 110
Регистрация: 27.12.2010
Сообщений: 819
Записей в блоге: 1
22.06.2014, 11:43
157 строка, он правильно написал, нужно у нее удалить function т.к. ты её вызываешь а не создаешь(причем ты ее уже создал):
PHP
1
MailSmtp($mail_to, $subject, $message, $headers);
а на скобку и точку с запятой говорит потому, что при создании функции надо ее тело писать в фигурных скобках, а не закрывать строку точкой с запятой.
1
62 / 62 / 11
Регистрация: 31.01.2013
Сообщений: 186
22.06.2014, 11:47
Все правильно выдает ошибку, вы пишите:
PHP
1
function MailSmtp($mail_to, $subject, $message, $headers);
То есть получается вы объявляйте функцию, и за этого выводится ошибка.

Чтобы исправить, нужно убрать слово function в начале:
PHP
1
MailSmtp($mail_to, $subject, $message, $headers);
Правда IDE в которой я работаю ругается еще и на 133 строку:
PHP
1
$multipart .= chunk_split(base64_encode($html));
Не определенная переменная $html.
1
22.06.2014, 11:53

Не по теме:

Цитата Сообщение от Encoder Посмотреть сообщение
Правда IDE в которой я работаю
В какой работаешь IDE?

0
62 / 62 / 11
Регистрация: 31.01.2013
Сообщений: 186
22.06.2014, 12:16
PHPStrom
0
0 / 0 / 0
Регистрация: 22.06.2014
Сообщений: 2
22.06.2014, 12:23  [ТС]
Точно, что-то я запарился уже наверно) а можете ещё подсказать, теперь при попытке запустить выводить такие ошибки:
Warning: fsockopen(): unable to connect to :0 (Failed to parse address "") in E:\Rooms\u388944\itautosystems.ru\www\ph ps\postmail.php on line 66

Warning: fgets(): supplied argument is not a valid stream resource in E:\Rooms\u388944\itautosystems.ru\www\ph ps\postmail.php on line 68


"Failed to parse address", нужно перекодировать адрес, чтобы он понял его, или в чем может быть ошибка? Адрес и порт указан, а он не видит их
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.06.2014, 12:23
Помогаю со студенческими работами здесь

Отправка сообщений через SMTP в RAD Studio 10.1 Berlin
begin SMTP := TIdSMTP.Create(Application); SMTP.Host := 'smtp.yandex.ru'; SMTP.Port := 465; SMTP.AuthType := satDefault; ...

Отправка e-mail через SMTP-сервер
Доброго времени суток. У меня возникла проблема - скрипт не желает отправлять сообщение через SMTP. Использую сервер гугла. Сам...

Отправка письма с вложением на почту SMTP
Добрый день. Просьба помочь со следующей проблемой: &lt;?php function show_form() { ?&gt; &lt;form action=&quot;&quot;...

Отправка почты по Smtp с вложением по данным из БД
Добрый день товарищи. Начал недавно изучать C# по этому просьба особо не ругать. Дело в следующем заключается. Нужно организовать отправку...

Отправка email на через smtp сервер mx1.mirohost.net из своей программы
Не получается отправить email через smtp сервер mx1.mirohost.net из своей программы if (comboBox1.SelectedItem is MailServer) ...


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

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

Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru