Доброго времени пытаюсь отправить изображения из формы на телеграмм.
Форма отправляется на почту и в телеграмм тоже. но только тексты. Картинки не получается отправить в телеграмм бот. Можете подсказать решение.
Вот код html
<code lang="javascript">
<form enctype="multipart/form-data" method="post" id="form" onsubmit="send(event, 'send.php')">
<p>Имя</p>
<input placeholder="Представьтесь" name="name" type="text" >
<p>Email</p>
<input placeholder="Укажите почту" name="email" type="text" >
<p>Сообщение</p>
<textarea name="text"></textarea>
<p>Прикрепить файлы</p>
<input type="file" name="myfile[]" multiple id="myfile" enctype="multipart/form-data">
<p><input value="Отправить" type="submit"></p>
</form>
</body>
<script>
function send(event, php){
console.log("Отправка запроса");
event.preventDefault ? event.preventDefault() : event.returnValue = false;
var req = new XMLHttpRequest();
req.open('POST', php, true);
req.onload = function() {
if (req.status >= 200 && req.status < 400) {
json = JSON.parse(this.response); // Ебанный internet explorer 11
console.log(json);
// ЗДЕСЬ УКАЗЫВАЕМ ДЕЙСТВИЯ В СЛУЧАЕ УСПЕХА ИЛИ НЕУДАЧИ
if (json.result == "success") {
// Если сообщение отправлено
alert("Сообщение отправлено");
} else {
// Если произошла ошибка
alert("Ошибка. Сообщение не отправлено");
}
// Если не удалось связаться с php файлом
} else {alert("Ошибка сервера. Номер: "+req.status);}};
// Если не удалось отправить запрос. Стоит блок на хостинге
req.onerror = function() {alert("Ошибка отправки запроса");};
req.send(new FormData(event.target));
}
</code>
Php Код
<?php
// Файлы phpmailer
require 'phpmailer/PHPMailer.php';
require 'phpmailer/SMTP.php';
require 'phpmailer/Exception.php';
// Переменные, которые отправляет пользователь
$name = $_POST['name'];
$email = $_POST['email'];
$text = $_POST['text'];
$file = $_FILES['myfile'];
// Формирование самого письма
$title = "Заголовок письма";
$body = "
<h2>Новое письмо</h2>
<b>Имя:</b> $name<br>
<b>Почта:</b> $email<br><br>
<b>Сообщение:</b><br>$text
";
// Настройки PHPMailer
$mail = new PHPMailer\PHPMailer\PHPMailer();
try {
$mail->isSMTP();
$mail->CharSet = "UTF-8";
$mail->SMTPAuth = true;
//$mail->SMTPDebug = 2;
$mail->Debugoutput = function($str, $level) {$GLOBALS['status'][] = $str;};
// Настройки вашей почты
$mail->Host = 'smtp.mail.ru'; // SMTP сервера вашей почты
$mail->Username = 'legend2209@mail.ru'; // Логин на почте
$mail->Password = '2209vcb'; // Пароль на почте
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
$mail->setFrom('legend2209@mail.ru', 'Имя отправителя'); // Адрес самой почты и имя отправителя
// Получатель письма
$mail->addAddress('raufqalay@gmail.com');
// $mail->addAddress('youremail@gmail.com'); // Ещё один, если нужен
// Прикрипление файлов к письму
if (!empty($file['name'][0])) {
for ($ct = 0; $ct < count($file['tmp_name']); $ct++) {
$uploadfile = tempnam(sys_get_temp_dir(), sha1($file['name'][$ct]));
$filename = $file['name'][$ct];
if (move_uploaded_file($file['tmp_name'][$ct], $uploadfile)) {
$mail->addAttachment($uploadfile, $filename);
$rfile[] = "Файл $filename прикреплён";
} else {
$rfile[] = "Не удалось прикрепить файл $filename";
}
}
}
// Отправка сообщения
$mail->isHTML(true);
$mail->Subject = $title;
$mail->Body = $body;
// Проверяем отравленность сообщения
if ($mail->send()) {$result = "success";}
else {$result = "error";}
} catch (Exception $e) {
$result = "error";
$status = "Сообщение не было отправлено. Причина ошибки: {$mail->ErrorInfo}";
}
// Отображение результата
echo json_encode(["result" => $result, "resultfile" => $rfile, "status" => $status]);
/* https://api.telegram.org/botXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
где, XXXXXXXXXXXXXXXXXXXXXXX - токен вашего бота, полученный ранее */
// $name = $_POST['user_name'];
// $email = $_POST['user_phone'];
// $text = $_POST['text'];
// $file = $_FILES['myfile'];
$token = "1061061801:AAFrnM3bfqF3CJfoHSWoz";
$chat_id = "902308022";
// define ('url',"https://api.telegram.org/bot1061061801:AAFrnM3bfqF3CJfoHSWozFCtOrxZsJAh7fg/");
$info = pathinfo($_FILES['myfile']['name']);
$ext = $info['extension']; // get the extension of the file
$newname = "newname.".$ext;
$target = 'images/'.$newname; // the path you want to upload your file
move_uploaded_file( $_FILES['photo']['tmp_name'], $target);
$arr = array(
'Пользователь заполнил форму',
'Имя пользователя: ' => $name,
'Text: ' => $text,
'Email' => $email,
// 'Хочу получать самые...' => $option2
);
foreach($arr as $key => $value) {
$txt .= "<b>".$key."</b> ".$value."%0A";
};
$params = [
'chat_id'=>$chat_id,
'photo'=>'Your site address/'.$target,
'caption'=>$_POST['name'],
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close($ch);
echo $server_output;
$sendToTelegram = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}","r");
// file_get_contents("https://api.telegram.org/bot{$token}/sendPhoto?chat_id={$chat_id}&photo=myfiles/newname.jpg");
?>