Возникла проблема при копировании некоторого содержимого из файла и отправке содержимого по почте с использованием Perl - PullRequest
0 голосов
/ 24 января 2012

Я сталкиваюсь с некоторыми проблемами, когда копирую несколько строк данных из файла в массив и затем использую команду print MAIL "$line" ; для отправки почты с содержимым этого файла с использованием Perl.

Когда я получаю письмо с содержимым файла, между текстом появляются неожиданные символы, которых не было в самом файле.

Я не уверен, почему это происходит, потому что это кажется простым.

my @mail_contents=<MAIL_CONTENT>;
chomp(@mail_contents);
my $line="";
foreach $line (@mail_contents)
{

      if($line =~/some pattern matching/)
      {
            $var1 = $line;
      }
      if($line =~/some pattern matching/)
      {
           $var2= $line;
      }
}

my @arr_var1=split(/&/,$var1);
my @arr_var2=split(/&/,$var2);

foreach my $OR (@arr_var1)
{
       print MAIL "$OR";
}
foreach my $FTD (@arr_var2)
{
       print MAIL "$FTD";
}

Содержимое файла:

<br> <font size=5> My name is Maxintown </font> <br> <br> <table> <tr> <td> <font color=blue> How are you today </font> </td> <td> <font color=blue> How do you do </font> </td> </tr>

Содержимое почты:

My name is Maxintown

How do are yo!u today

How do you d!o

Понятно, что вы можете видеть!как нежелательный персонаж.Но в файле его нет.Так что я не уверен, что происходит.Пожалуйста, предоставьте предложения.

Ответы [ 2 ]

2 голосов
/ 24 января 2012

Выбросьте свой код и начните все сначала. Используйте Courriel :: Builder для генерации сообщений электронной почты MIME и Email :: Sender для их отправки.

0 голосов
/ 24 января 2012

Если у вас возникают проблемы с отправкой данных по электронной почте, одним из подходов будет отправка вашей базы данных в кодировке 64. Это можно легко сделать, используя функции encode_base64 и decode_base64 из встроенного модуля MIME :: Base64 .

Таким образом, при вводе данных в сообщение электронной почты пропустите его через encode_base64, а при получении данных из сообщения электронной почты пропустите его через decode_base64. Это будет работать для данных, состоящих из байтов.

Если ваши данные содержат кодовые точки вне диапазона байтов (от 0 до 0xFF), то вам сначала нужно будет закодировать их до байтов, так что вы можете рассмотреть что-то вроде encode_utf8 из встроенного модуля Кодировать , затем используйте decode_utf8 для восстановления исходных данных.

Например:

print $outgoingMessage encode_base64(encode_utf8($some_utf_8_string));

($outgoingMessage - дескриптор файла для исходящего сообщения.)

Вы должны убедиться, что в вашем сообщении электронной почты тип содержимого соответствующим образом помечен, например:

From: ...
To: ...
Subject: ...
Date: ...
MIME-Version: 1.0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64

V2VsbCBkb25lLCB5b3UndmUgc3VjY2Vzc2Z1bGx5IGRlY29kZWQgdGhlIGJhc2U2NCBkYXRhIGlu
IG15IHN0YWNrb3ZlcmZsb3cuY29tIGFuc3dlci4gVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBv
dmVyIHRoZSBsYXp5IGRvZy4gTm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBtZW4gdG8gY29t
ZSB0byB0aGUgYWlkIG9mIHRoZSBwYXJ0eS4=

Вы должны выбрать подходящий тип контента для ваших данных и указать его в записи типа контента. Поэтому, если вы знаете, что ваш контент является HTML, и вы использовали encode_base64, тогда запись Content-Type должна выглядеть следующим образом:

Content-Type: text/html; charset="UTF-8"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...