Отправка электронной почты с CURL: появляются некоторые китайские иероглифы

432
zipomojiv

Я отправляю некоторые электронные письма, используя SMTP и CURL через TOR, но у меня есть проблема: я получаю некоторые китайские иероглифы вместо тех, которые я должен получить, любая идея?

Вот как я отправляю почту, используя пакетный скрипт (у меня есть файловая переменная):

curl.exe --socks5-hostname 127.0.0.1:9050 smtp://onionaddre.onion:port --mail-from mail@onionaddr.onion --mail-rcpt mail@onionaddr.onion --user mail@onionaddr.onion:password --upload-file %filetosend% 

Это оригинальное сообщение:

0asf345£%$&fdasdhhs#@deadfga 

Вот что я получаю:

聣聭聤聭聯聶聥耠職聮聯職耠職聩聢聴聹耠聣聬聩耍耛聳聢耍聲 
1
Я не очень понимаю, что ты здесь делаешь. Но когда вы видите такое поведение, это обычно не соответствует кодировке. Как вы кодируете данные и что ожидает получатель? Unicode / Base64 / ASCII и т. Д. Appleoddity 6 лет назад 0
Я понятия не имею. В основном у меня есть программа PowerShell, которая генерирует символы в соответствии с временем и датой (например, ключ шифрования), а затем мне нужно отправить этот ключ через Tor. Я не знаю, какая кодировка используется, как мне это проверить? Я использую почтовый сервер TOR TorBox с SquirrelMail 1.4.22 zipomojiv 6 лет назад 0
Вы можете заставить Powershell кодировать текст в UTF8, выполнив следующее: `$ UTF8 = [System.Text.Encoding] :: UTF8`` $ Message = "blah" `` $ UTF8Message = $ UTF8.GetBytes ($ Message) ` shinjijai 6 лет назад 0
@shinjijai это должно быть добавлено в код PowerShell, который генерирует файл правильно? zipomojiv 6 лет назад 0
Если вы используете Powershell для генерации файла, вы можете сохранить файл как UTF8, используя параметр `-Encoding` и указав` UTF8`. Например, `Out-File -Path" file.ext "-Кодировка" UTF8 "`. Если вы загружаете файл с помощью другого скрипта Powershell, используя `Get-Content`, не забудьте также использовать здесь` -Encoding "UTF8". Но так как вы используете `--upload-file`, файл сохраняется с `UTF8` должно хватить. Я надеюсь, что это имеет смысл. shinjijai 6 лет назад 0
@shinjijai для генерации пути сохранения файла, который я использую: 'function Start-EncKey ($ path = "$ env: enc.key")' (позже я перемещаю этот enc.key в mail.txt с помощью команды cmd move), поэтому я следует изменить его на: 'function Start-EncKey ($ path = "$ env: enc.key") -Кодирование "UTF8"' правильно? zipomojiv 6 лет назад 0
@shinjijai, даже если позже у меня уже есть: 'if ($ success) {[System.IO.File] :: AppendAllText ($ Path, $ myvalue, [System.Text.Encoding] :: Unicode)' zipomojiv 6 лет назад 0
Измените `[System.Text.Encoding] :: Unicode` на` [System.Text.Encoding] :: UTF8`. Я думаю, что это ваша проблема, файл в кодировке Unicode, и cURL может публиковать как UTF8, я не знаю, что это за настройки по умолчанию для cURL. shinjijai 6 лет назад 1
Отлично, это работает! Добавьте это к ответам, чтобы я мог принять это zipomojiv 6 лет назад 0

2 ответа на вопрос

1
sneep

Пока не совсем ответ, но может быть полезным и не вписался бы в раздел комментариев.

Если вы внимательно посмотрите на китайские иероглифы, вы увидите, что большинство из них имеют похожую (радикальную) вещь на левой стороне. Обычно это означает, что у них очень похожая кодовая точка.

$ perl -e 'use utf8; $foo = "聣聭聤聭聯聶聥耠職聮聯職耠職聩聢聴聹耠聣聬聩耍耛聳聢耍聲"; while ($foo =~ s/^(.)//) { printf("%04x\n", ord($1)) }' 8063 806d 8064 806d 806f 8076 8065 8020 8077 806e 806f 8077 8020 8077 8069 8062 8074 8079 8020 8063 806c 8069 800d 801b 8073 8062 800d 8072 

Если мы избавимся от 80s, мы получим простой ASCII:

$ perl -e 'print "\x63\x6d\x64\x6d\x6f\x76\x65\x20\x77\x6e\x6f\x77\x20\x77\x69\x62\x74\x79\x20\x63\x6c\x69\x0d\x1b\x73\x62\x0d\x72\n"' rmdmove wnow wibty cli 

Я не могу понять смысл этого текста, но, может быть, вы можете.

Возможно, я ошибся в электронном письме и отправленном файле, сейчас еще раз проверю и сообщу. Этот процесс возможен только с Perl? это возможно с помощью пакета или PowerShell? zipomojiv 6 лет назад 0
Нет, я просто использовал Perl, чтобы продемонстрировать это. Я не думаю, что вам действительно нужно запускать эти команды. (Не знаю много о batch / powershell. Должно быть возможно в powershell.) Подумал, что это может помочь, но, возможно, это не помогло. sneep 6 лет назад 0
@zipomojiv Если вы используете PowerShell, вы можете использовать Send-MailMessage, есть ли причина, почему вы делаете это в curl? shinjijai 6 лет назад 0
Хорошо, я проверил еще раз с другим файлом, и да, это проблема. По какой-то причине кодировка меняется при отправке файла. Есть ли способ изменить код автоматически? например, у меня есть 10 текстовых файлов на китайском языке, и я хочу «перевести» их в читаемые символы, что мне делать? Я нашел этот веб-сайт https://r12a.github.io/apps/conversion/ для преобразования chine в / xxxx, затем я удаляю все 80 в слове, а затем снова пропускаю результат здесь https: //r12a.github. IO / приложения / преобразования /, имея мой текст. Слишком медленно для анализа нескольких файлов zipomojiv 6 лет назад 0
@shinjijai Да, использовать TOR. Не найдено ни одного почтового CLI-сервиса, который поддерживает tor, только CURL zipomojiv 6 лет назад 0
0
shinjijai

Исходя из комментариев, загружаемый вами файл создается другим скриптом Powershell, который используется if ($success) { [System.IO.File]::AppendAllText($Path, $myvalue, [System.Text.Encoding]::Unicode)для сохранения контента на диск.

Сохранение файла с кодировкой символов UTF8 должно исправить проблему, поэтому замените [System.Text.Encoding]::Unicodeна [System.Text.Encoding]::UTF8.