muhammadislom
@muhammadislom
PHP Laravel

Отправки нескольких изображении через форму в телеграмм бот?

Доброго времени пытаюсь отправить изображения из формы на телеграмм.
Форма отправляется на почту и в телеграмм тоже. но только тексты. Картинки не получается отправить в телеграмм бот. Можете подсказать решение.

Вот код 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");


?>
  • Вопрос задан
  • 337 просмотров
Решения вопроса 1
KorniloFF
@KorniloFF Куратор тега JavaScript
Работаю по font-end / JS
А вы так и отправляете, что ли?
'photo'=>'Your site address/'.$target,
Нужно свой путь подставить.

И через метод sendMessage мультимедиа не отправляются. Читайте мануалы по BotAPI.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
26 апр. 2024, в 09:18
500 руб./в час
26 апр. 2024, в 06:46
1500 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект