Home > Mobile >  The body of the form in Cyrillic outputs in my mail as strange symbols
The body of the form in Cyrillic outputs in my mail as strange symbols

Time:10-25

First time using this platform, please be patient with me.

I have a contact form on my webpage. When I submit the message the body of the message that contains my Name, Phone, Subject, Message and Reply to appears in my mail as strange symbols.

I searched in the internet but the only thing found was: '=?UTF-8?B?' . base64_encode("Съобщение от сайта: " . $subject) . '?='; And it worked just for my subject. When I try to apply this for to my body, I get no success.

I will appreciate if someone can help me or give a direction how to fix this problem. Thank you in advance.

Enough said here is my code:

<?php

if(!isset($_POST['submit']))
{
    //This page should not be accessed directly. Need to submit the form.
    echo "Грешка; трябва да изпратите формата";
}
$name = $_POST['name'];
$visitor_email = $_POST['email'];
$message = $_POST['message'];
$subject = $_POST['subject'];
$phone = $_POST['phone'];

//Validate first
if(empty($name)||empty($visitor_email)) 
{
        echo "Име и имейл са задължителни.";
        exit;
}

if(IsInjected($visitor_email))
{
        echo "Невалиден имейл.";
        exit;
}

$email_from = 'z3robot@...';//<== update the email address
$email_subject = '=?UTF-8?B?' . base64_encode("Съобщение от сайта: " . $subject) . '?='; "\n";
$email_body = "Name: $name. \n". 
              "Phone: $phone. \n". 
              "Subject: $subject. \n". 
              "The message is: $message. \n".
              "Reply to: $visitor_email \n";

$to = "z3robot@...";//<== update the email address
$headers = "From: $email_from \r\n";

if(mail($to, $email_subject, $email_body, $headers)){
    //if successful go to index page in 3 seconds.
    echo "Съобщението е изпратено успешно. Ще бъдете прехвърлени на главната страница след 3 секунди.";
    header("refresh:3; url=index.html");
}else{
    //if not successful go to contacts page in 5 seconds.
    echo "Съобщението НЕ е изпратено успешно. Ще бъдете прехвърлени отново в страница Контакти след 5 секунди.";
    header("refresh:5; url=contact-us.html");
}
//done.


// Function to validate against any email injection attempts
function IsInjected($str)
{
    $injections = array('(\n )',
          '(\r )',
          '(\t )',
          '(
 )',
          '(
 )',
          '( )',
          '(	 )'
          );
$inject = join('|', $injections);
$inject = "/$inject/i";
if(preg_match($inject,$str))
    {
        return true;
}else{
        return false;
}
}

?> 

CodePudding user response:

Thanks to all that make suggestions. I made a completely new file and used PHPMailer and everything works. Here is the code:

<?php

        use PHPMailer\PHPMailer\PHPMailer;
        use PHPMailer\PHPMailer\SMTP;
        use PHPMailer\PHPMailer\Exception;

        //Load Composer's autoloader
        require 'vendor/autoload.php';

        //Get data from form
        $name = $_POST['name'];
        $visitor_email = $_POST['email'];
        $message = $_POST['message'];
        $subject = $_POST['subject'];
        $phone = $_POST['phone'];

        //Preparing mail content
        $messagecontent = "Име: <br><b>$name</b>" . 
                  "<br><br>Телефон: <br><b>$phone</b>" . 
                  "<br><br>Основание: <br><b>$subject</b>" . 
                  "<br><br>Съобщение: <br><b>$message</b>" . 
                  "<br><br>Имейл: <br><b>$visitor_email </b><br>";

        //Create an instance; passing `true` enables exceptions
        $mail = new PHPMailer(true);
        $mail->CharSet = 'UTF-8';      //to convert chars to Cyrillic alphabet
        try {

          //Line for debugging if needed
          $mail->SMTPDebug = SMTP::DEBUG_SERVER;

          //Server settings
          $mail->isSMTP();                                       //Send using SMTP
          $mail->Host       = 'smtp.mail.com';                     //Set the SMTP server to send through
          $mail->SMTPAuth   = true;                              //Enable SMTP authentication
          $mail->Username   = '[email protected]';                  //SMTP username
          $mail->Password   = 'password';                        //SMTP password
          //$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
          $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;       //SMTP Encryption
          $mail->Port       = 465;                               //TCP port to connect to; use 587 if you have set `SMTPSecure =                PHPMailer::ENCRYPTION_STARTTLS`
          
          //Recipients
          $mail->setFrom('[email protected]', 'Mailer');         //Add visitors email and name $$
          $mail->addAddress('[email protected]', 'text');  //Add a recipient

          //Content
          $mail->isHTML(true);                                  //Set email format to HTML
          $mail->Subject = "Съобщение от сайта: " . $subject;   //subject of the send email
          $mail->Body    = $messagecontent;                     //Content message of the send email
            
          $mail->send();
          header("Location: sent.html");
        }
        catch (Exception $e) 
        {
          header("Location: not-sent.html");
          //echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
        }
?> 
  • Related