Cyrillic characters are distorted when sending a letter

You need to add lines like this:

SELECT UTL_I18N.MAP_CHARSET(VALUE)
INTO Charset
FROM NLS_DATABASE_PARAMETERS
WHERE parameter = 'NLS_CHARACTERSET';

UTL_SMTP.WRITE_DATA(l_mail_conn, 'Content-Type: text/plain; charset='||Charset || UTL_TCP.CRLF);

By this you tell the mail server/client which character set is used in the mail.

The mail subject does not natively support Non-ASCII characters. You need to encode it like this (see. RFC1342):

UTL_SMTP.WRITE_DATA(con, 'Subject: =?UTF-8?B?'|| UTL_ENCODE.TEXT_ENCODE('Привет мир!', 'AL32UTF8', UTL_ENCODE.BASE64) ||'?='||UTL_TCP.CRLF);

See how to export data from log table to email body in oracle to get a more advanced and complete solution.