Пример скрипта Perl для Amazon SES не работает в режиме raw -r с использованием stdin под windows - PullRequest
1 голос
/ 21 февраля 2011

Я пытаюсь заставить Amazon SES работать, чтобы отправлять электронную почту, используя их примеры сценариев. Я не Perl парень на самом деле, но примеры на Perl, пусть будет так.

Примеры SES предоставляют скрипт для проверки вашего адреса от: (сделано) и проверки статистики (работает нормально), а также для отправки электронного письма (тоже работает, пока ...)

Я могу отправлять электронную почту в режиме простого параметра или в режиме необработанного параметра, если я использую STDIN и набираю части тела сообщения - либо целое сообщение в случае необработанного, либо только фактическое тело в случае простого. Это отлично работает. Однако, если я использую <для использования ввода из файла вместо этого, он не будет читать его. Он говорит «Отсутствует от», а затем, если я укажу это в командной строке, я получу «Отсутствует», и если я укажу это также в командной строке, я получу «Отсутствующий субъект» - и если вы попытаетесь указать тему в командной строке вместе с параметром -r он правильно отвечает, что вам не разрешено указывать тему при использовании необработанного режима. (по-видимому, вы <i>можете указать только from и to.)

У меня ActiveState Perl 5.12.3 Build 1204. Я установил все предварительные требования, по-видимому, так как я могу отправлять электронную почту очень хорошо, пока не попытаюсь заставить ее читать данные из файла как STDIN. Я использую Win Srv 03 R2 SP2. Я уже получил доступ к продукту от Amazon, и я не нахожусь вблизи моего лимита в 1000 писем в день.

Это пример команды, которую я пытаюсь запустить:

C:\amazon-testing-folder\perl>ses-send-email.pl -k aws-credentials -r < raw-email.txt
Missing Required header 'From'.

Использование относительного или абсолютного пути / спецификации файла ничего не меняет. Правильное присвоение неверного имени файла приводит к тому, что ОС выдает сообщение «Система не может найти указанный файл».

Насколько я могу судить, эта строка, кажется, ничего не читает, если я указываю имя файла.

$opts{'m'} = join '', readline *STDIN;

Это в ses-send-email.pl, несколько строк сверху в sub read_message {}.

Я попытался вставить несколько строк отладки после этого, чтобы увидеть, читает ли он что-нибудь, и они, кажется, подтверждают, что это не так. Мой необработанный файл отформатирован правильно, и да, у него есть строка From: и To:! И тема: линия! Я также удалил все строки заголовков, которых не было в списке поддерживаемых заголовков Amazon (например, Content-Class:).

Кто-нибудь заставил это работать? Заранее спасибо ... Не уверен, что попробовать дальше.

Пример файла raw-email.txt: (Я также пытался изменить порядок строк заголовка, но я действительно не думаю, что он читает в файле.)

To: <anyone@anywhere.com>
From: <a-verified-address@domain.com>
Message-ID: <697745840.1.1292371199964@0023df9374dc>
Subject:  February 21 Test
Date: Mon, 21 Feb 2011 05:00:00 -0600
MIME-Version: 1.0
Content-Type: multipart/alternative;   
    boundary="----=abcdefg"

This is a multi-part message in MIME format.

If you are seeing this message, your mail program
doesn't understand rich-formatted email. 

----=abcdefg
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

Text Message Goes Here.

----=abcdefg
Content-Type: text/html;
    charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

HTML<br>version<br>goes<br>here<br>

----=abcdefg--

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

Я использовал отладчик и не могу воспроизвести ваше сообщение об ошибке.Программа читает из STDIN просто отлично, затем бомбит только в SES::call_ses, потому что у меня нет ключа Amazon.

$ perl -d ses-send-email.pl -k aws-credentials -r < raw-email.txt

Loading DB routines from perl5db.pl version 1.33
Editor support available.

Enter h or `h h' for help, or `man perldebug' for more help.

main::(ses-send-email.pl:30):   my  %opts = ();
  DB<1> c 138
main::(ses-send-email.pl:138):  my ($response_code) = SES::call_ses \%params, \%opts;
  DB<2> xx \%params
{
  Action => "SendRawEmail",
  "RawMessage.Data" => "VG86IDxhbnlvbmVAYW55d2hlcmUuY29tPgpGcm9tOiA8YS12ZXJpZmllZC1hZGRyZXNzQGRvbWFp\nbi5jb20+Ck1lc3NhZ2UtSUQ6IDw2OTc3NDU4NDAuMS4xMjkyMzcxMTk5OTY0QDAwMjNkZjkzNzRk\nYz4KU3ViamVjdDogIEZlYnJ1YXJ5IDIxIFRlc3QKRGF0ZTogTW9uLCAyMSBGZWIgMjAxMSAwNTow\nMDowMCAtMDYwMApNSU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRl\ncm5hdGl2ZTsKICAgIGJvdW5kYXJ5PSItLS0tPWFiY2RlZmciCgpUaGlzIGlzIGEgbXVsdGktcGFy\ndCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgoKSWYgeW91IGFyZSBzZWVpbmcgdGhpcyBtZXNzYWdl\nLCB5b3VyIG1haWwgcHJvZ3JhbQpkb2Vzbid0IHVuZGVyc3RhbmQgcmljaC1mb3JtYXR0ZWQgZW1h\naWwuCgotLS0tPWFiY2RlZmcKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCkNvbnRlbnQtVHJhbnNm\nZXItRW5jb2Rpbmc6IDdiaXQKClRleHQgTWVzc2FnZSBHb2VzIEhlcmUuCgotLS0tPWFiY2RlZmcK\nQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7CiAgICBjaGFyc2V0PSJpc28tODg1OS0xIgpDb250ZW50\nLVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCgpIVE1MPGJyPnZlcnNpb248YnI+\nZ29lczxicj5oZXJlPGJyPgoKLS0tLT1hYmNkZWZnLS0=\n"
}

  DB<3> xx \%opts
{
  b => undef,
  c => undef,
  e => undef,
  f => undef,
  h => undef,
  k => "aws-credentials",
  m => "To: <anyone\@anywhere.com>\nFrom: <a-verified-address\@domain.com>\nMessage-ID: <697745840.1.1292371199964\@0023df9374dc>\nSubject:  February 21 Test\nDate: Mon, 21 Feb 2011 05:00:00 -0600\nMIME-Version: 1.0\nContent-Type: multipart/alternative;\n    boundary=\"----=abcdefg\"\n\nThis is a multi-part message in MIME format.\n\nIf you are seeing this message, your mail program\ndoesn't understand rich-formatted email.\n\n----=abcdefg\nContent-Type: text/plain\nContent-Transfer-Encoding: 7bit\n\nText Message Goes Here.\n\n----=abcdefg\nContent-Type: text/html;\n    charset=\"iso-8859-1\"\nContent-Transfer-Encoding: quoted-printable\n\nHTML<br>version<br>goes<br>here<br>\n\n----=abcdefg--",
  r => 1,
  s => undef,
  t => undef,
  verbose => undef
}

  DB<4>
0 голосов
/ 22 февраля 2011

Для следующего парня, столкнувшегося с этим:

Во-первых, убедитесь, что ваш входной файл (файл, который вы указываете после Как только вы исправите это, вы можете получить «Missing start border».Скорее всего, это связано с тем, что черточки находятся не в том местеПри создании MIME с нуля (не то, что вы должны ... но я это сделал ...) "граница", которая определяет границу, должна выглядеть больше как

boundary="some-boundary-string"

, и тогда фактические границы должны выглядеть следующим образом

--some-boundary-string

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

--some-boundary-string--

Надеюсь, это когда-нибудь кому-нибудь поможет.И я надеюсь, что этот человек не пытается рассылать спам.И если они есть, я надеюсь, что боги Амазонки поразят их резко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...