E-Mail-Versand mit CURL: Einige chinesische Zeichen werden angezeigt

544
zipomojiv

Ich versende einige E-Mails mit SMTP und CURL über TOR, aber ich habe ein Problem: Ich erhalte chinesische Schriftzeichen über denjenigen, die ich erhalten sollte.

So sende ich die Mail mit einem Batch-Skript (ich habe eine Dateivariable):

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% 

Dies ist die ursprüngliche Nachricht:

0asf345£%$&fdasdhhs#@deadfga 

Das bekomme ich:

聣聭聤聭聯聶聥耠職聮聯職耠職聩聢聴聹耠聣聬聩耍耛聳聢耍聲 
1
Ich verstehe nicht wirklich, was du hier machst. Wenn Sie jedoch ein solches Verhalten sehen, ist dies normalerweise ein Konflikt bei der Kodierung. Wie verschlüsseln Sie die Daten und was erwartet der Empfänger? Unicode / Base64 / ASCII usw. Appleoddity vor 6 Jahren 0
Ich habe keine Ahnung. Grundsätzlich habe ich ein Powershell-Programm, das Zeichen nach Zeit und Datum generiert (wie einen Verschlüsselungsschlüssel), und dann muss ich diesen Schlüssel über Tor senden. Ich weiß nicht, welche Kodierung verwendet wird. Wie kann ich das überprüfen? Der TOR-Mail-Server, den ich verwende, ist TorBox mit SquirrelMail 1.4.22 zipomojiv vor 6 Jahren 0
Sie können Powershell zwingen, den Text in UTF8 zu kodieren, indem Sie Folgendes tun: $ UTF8 = [System.Text.Encoding] :: UTF8 `` $ Message = "blah" `` $ UTF8Message = $ UTF8.GetBytes ($ Message) ` shinjijai vor 6 Jahren 0
@shinjijai sollte dies in den Powershell-Code eingefügt werden, der die Datei richtig generiert? zipomojiv vor 6 Jahren 0
Wenn Sie Powershell verwenden, um die Datei zu generieren, können Sie die Datei als UTF8 speichern, indem Sie den Parameter `-Encoding` verwenden und` UTF8` angeben. Zum Beispiel `Out-File -Path" file.ext "-Encoding" UTF8 "`. Wenn Sie die Datei mit einem anderen Powershell-Skript mit "Get-Content" laden, müssen Sie auch dort die Option -Encoding "UTF8" verwenden. Da Sie jedoch die Datei "--upload-file" verwenden, wird die Datei gespeichert mit `UTF8` sollte genügen. Ich hoffe das macht Sinn. shinjijai vor 6 Jahren 0
@shinjijai, um den Dateispeicherpfad zu generieren, verwende ich: 'function Start-EncKey ($ path = "$ env: enc.key")' (später verschiebe ich diesen enc.key mit dem Befehl cmd move in mail.txt), so dass ich sollte es ändern in: 'Funktion Start-EncKey ($ path = "$ env: enc.key") -Encoding "UTF8"' richtig? zipomojiv vor 6 Jahren 0
@shinjijai auch wenn ich später bereits habe: 'if ($ success) {[System.IO.File] :: AppendAllText ($ Path, $ myvalue, [System.Text.Encoding] :: Unicode)' zipomojiv vor 6 Jahren 0
Ändern Sie `[System.Text.Encoding] :: Unicode` in `[System.Text.Encoding] :: UTF8`. Ich denke, das ist Ihr Problem, die Datei ist Unicode und cURL könnte als UTF8 veröffentlicht werden. Ich weiß nicht, was die Standardeinstellungen für cURL sind. shinjijai vor 6 Jahren 1
Perfekt, es funktioniert! Fügen Sie es den Antworten hinzu, damit ich es akzeptieren kann zipomojiv vor 6 Jahren 0

2 Antworten auf die Frage

1
sneep

Noch nicht wirklich eine Antwort, aber vielleicht hilfreich und würde nicht in den Kommentarbereich passen.

Wenn Sie sich die chinesischen Zeichen genau ansehen, werden Sie feststellen, dass die meisten von ihnen auf der linken Seite ein ähnliches Element (radikal) haben. Dies bedeutet normalerweise, dass sie einen sehr ähnlichen Codepunkt haben.

$ 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 

Wenn wir die 80s loswerden, erhalten wir reines 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 

Ich kann diesen Text nicht verstehen, aber vielleicht können Sie es.

Wahrscheinlich habe ich die E-Mail und die gesendete Datei falsch verstanden, ich werde es jetzt noch einmal überprüfen und Sie wissen lassen. Ist dieser Prozess nur mit Perl möglich? ist es mit batch oder powershell möglich? zipomojiv vor 6 Jahren 0
Nein, ich habe Perl benutzt, um das zu demonstrieren. Ich glaube nicht, dass Sie diese Befehle unbedingt ausführen müssen. (Keine Ahnung von Batch / Powershell. Sollte in Powershell möglich sein.) Ich dachte, es könnte helfen, aber vielleicht nicht. sneep vor 6 Jahren 0
@zipomojiv Wenn Sie Powershell verwenden, können Sie send-mailmessage verwenden. Gibt es einen Grund, warum Sie es in curl machen? shinjijai vor 6 Jahren 0
Ok, ich habe noch einmal mit einer anderen Datei nachgesehen und ja, das ist das Problem. Aus irgendeinem Grund ändert sich die Kodierung, wenn die Datei gesendet wird. Gibt es eine Möglichkeit, den Code automatisch zu ändern? Ich habe zum Beispiel 10 TXT-Dateien auf Chinesisch und möchte sie in lesbare Zeichen "übersetzen". Was soll ich tun? Ich fand diese Website https://r12a.github.io/apps/conversion/ für die Chine zu / xxxx-Transformation, dann entferne ich alle 80 in Word und dann übergebe ich das Ergebnis hier wieder https: //r12a.github. io / apps / conversion /, habe meinen Text. Für mehrere Dateianalysen zu langsam zipomojiv vor 6 Jahren 0
@shinjijai Ja, um TOR zu verwenden. Es wurde kein E-Mail-CLI-Dienst gefunden, der tor unterstützt, nur CURL zipomojiv vor 6 Jahren 0
0
shinjijai

Aus den Kommentaren wird die hochgeladene Datei von einem anderen Powershell-Skript erstellt, mit if ($success) { [System.IO.File]::AppendAllText($Path, $myvalue, [System.Text.Encoding]::Unicode)dem der Inhalt auf der Festplatte gespeichert wird.

Das Speichern der Datei mit der Zeichenkodierung UTF8 sollte das Problem beheben. Ersetzen Sie daher [System.Text.Encoding]::Unicodein [System.Text.Encoding]::UTF8.