Perl の Net::SMTP でポート指定をする

Perl, TIPS, 開発 No Comments »

Outbound Port25 Blocking は、ほとんどのプロバイダやホスティング業者が実施している、迷惑メール対応策です。
このようなサーバに対し、Perl でメールを送ることを考えると、Net::SMTP を利用することになるのですが、ポート指定を忘れて詰まってしまったので、そのメモ。

*

Perl の Net::SMTP でも、オブジェクトが生成できないと、次の様なエラーが出ます。

Can’t call method “mail” on an undefined value at <変数名>

ですので、587 など他のポートを使う場合には、次の様に記述しましょう。
リファレンスはここ

$smtp = Net::SMTP->new(’mailhost’,Port=>’587′);

Net::SMTP は直接 Port オプションを持たないので、探すのに一手間かかりますね。

  • Share/Bookmark

Perl で XML::TreeBuilder を使ってみる

Perl, TIPS, 開発 No Comments »

仕事で Perl を使う案件があり、そのなかで利用されていた XML::TreeBuilder について、最低限の使用方法を忘れないようにメモ。

*

XML::TreeBuilder 自体は CPAN でダウンロードし、インストールします。

使い方は、ざっくりと次の通り。

  1. ライブラリを読み込む
  2. インスタンス作る
  3. XML を解析する
  4. 中身をいじる
  5. インスタンスを破棄する

具体的なコードにすると次の通り。

  1. use XML::TreeBuilder;
  2. $h = XML::TreeBuilder->new;
  3. $h->parse(<XML のデータ>);
  4. $h->find() とか $h->attr() とか ->as_text とか
  5. $h->delete;

*

この中では、4番の解析部分が一番多く使われると言うか処理の中心になると思います。
例えば次の XML の場合について考えます。

<root>
  <id>0</id>
  <entry>
    <id>1</id>
  </entry>
  <entry>
    <id>2</id>
  </entry>
  <entry>
    <id>3</id>
  </entry>
</root>

この XML のすべての id ダグを抜き出すのであれば、次のコードになります。

@ids = $h->look_down( _tag=>'id' );

foreach (@ids) {
  print $_->as_text;
}

id タグすべてが取得されます。
この場合、画面には「0123」 が表示されます。

しかし、一般的には entry 以下の id 「123」を抜き出したいでしょう。その場合には次のコードになります。

@entries = $h->find('entry');

foreach (@entries) {
  print $_->tag('id')->as_text;
}

look_down() が下位ノードのすべてのノードを取得するのに対し、tag() は子ノードのみを対象とするわけですね。
組み合わせることで、DOM の階層を表現できます。

※as_text は、現在のタグの内容を文字列で取得する関数

他にも便利な関数はたくさんありますが、とりあえずメモと言うことで。

  • Share/Bookmark

Perl でメール送信 (SMTP AUTH)

Perl, 開発, 雑記 No Comments »

昨日問題となった件の解決策です。

デバッグ情報と、VIGIL でパケットをモニタリングした結果、タイトルの SMTP AUTH で引っかかっていたようです。

ですので、下記のように、mail() メソッドを呼ぶ前に auth() メソッドで認証をかける必要があったわけです。

use Net::SMTP;
my $smtp = Net::SMTP->new(<SMTPサーバ>, Debug=>1);
$smtp->auth(<ユーザ名>, <パスワード>);
$smtp->mail(<メールアドレス>);
$smtp->to(<メールアドレス>);
$smtp->data();
$smtp->datasend(<Form:とかTo:とかSubject:とか>);
$smtp->datasend(‘\n’);
$smtp->datasend(<メール本文>);
$smtp->dataend();
$smtp->quit;

  • Share/Bookmark

502 unimplemented

Perl, 開発, 雑記 No Comments »

Perl でメールが送れない問題第二段発生。

サーバによって設定等々、面倒なものですね。

  • Share/Bookmark

Perl の Net::SMTP でボケました

Perl, 開発, 雑記 No Comments »

最近は Outbound Port25 Blocking で閉じられているサーバが多いのですが、自分の利用しているサーバもそうであったこと忘れ、メールが送れないと詰まってしまいました。

エラー例:Can’t call method “mail” on an undefined value at ~

デバッグの方法としては、コンストラクタで Debug フラグを立てて、エラー表示から追いました。

コード例:$smtp = Net::SMTP->new(‘mailhost’, Debug   => 1)

リファレンスって重要です。

  • Share/Bookmark

Perl を久しぶりに触った

Perl, 開発, 雑記 No Comments »

リファレンスがあれば使える程度に覚えていました。

  • Share/Bookmark
WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS ログイン