SlideShare ist ein Scribd-Unternehmen logo
1 von 24
Downloaden Sie, um offline zu lesen
Perl and Email #3
@azumakuniyuki Cubicroot Co. Ltd.
Kyoto.pm #05 in 京都::はてなさん 2013/07/13(土)
Emailクラウド風メール送信用HTTP API "Haineko"
七
月
十
七
日
加
筆
修
正
自己紹介
あずま@京都
@azumakuniyuki
鯖管
プログラマ
たまに
Perl
+(猫)
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
2
作ったもの
- bounceHammer
- バウンスメール解析するやつ
- YAML/JSONで出る
- http://bouncehammer.jp/
- Acme::Nyaa
- 初CPANモジュール/猫系
- 神と和解せよ => ネコと和解せよ
- 祇園祭です => 祇園祭ですニャー
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
3
Perl and Email #3
Emailクラウド風メール送信用HTTP API "Haineko"
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
4
Haineko``はいねこ''
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
5
HTTP
API
INTO
ESMTP
K=undef
O=undef
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
6
- リレーサーバ(キューは持たない)
- HTTPでメールを送る => Mojolicious
- 他のSMTPサーバかEmailクラウドへリレー
- 応答は全てJSON
- Hainekoに渡すときの認証は未実装
- $REMOTE_ADDRでリレー制限(relayhosts)
- 許可された宛先のみに送信(recipients)
Hainekoの概要
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
7
Architecture
Hainekoの処理の流れ、全体図と部分図。
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
8
Haineko Flow
Haineko
HTTP Request
HTTP Request
ESMTP Relay
Email Cloud
SendGrid(実装済)
Postmark(まだ)
MailChimp(まだ)
AmazonSES(まだ)
HTTP Listen on 2794
HTTPS Listen on 2894
mailertable/sendermt
HTTP Response
ESMTP Response
HTTP Response
POST
HTTP CLIENT
Browser / wget / curl
to JSON
Any SMTP Server
smtp.example.jp:25
tls.example.com:465
smtp.gmail.com:587
Another
Haineko Server
SMTP
HTTP / HTTPS
SMTP-AUTH
STARTTLS
PIPELINING
Check REMOTE_ADDR
Check RCPT_TO
Rejected
Cannot connect
JSON
JSON
JSON
JSON
JSON
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
9
ESMTP Relay
Haineko
ESMTP or HTTP Response
etc/mailertable
etc/sendermt
etc/mailertable:default
宛先アドレスのドメインに一致
発信アドレスのドメインに一致
一致するドメインなし
defaultの定義がない
127.0.0.1:25にリレー
一致する発信アドレスのドメインなし
一致する宛先アドレスのドメインなし
to JSON
127.0.0.1でSMTPdが動いていない
127.0.0.1:25 SMTP
SMTP
HTTP / HTTPS
HTTP/HTTPS
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
10
Table Files
各種の制限項目、経路テーブルなど。
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
11
- 宛先ドメインでのルーティングテーブル(YAML)
default:
mailer: 'ESMTP'
host: '192.0.2.22'
port: 25
example.com:
mailer: 'ESMTP'
host: 'smtp.gmail.com'
port: 587
auth: 'Google'
starttls: 1
etc/mailertable
← 宛先が *@example.comの時は
← ESMTPで
← Gmailの587番ポートに接続
← etc/authinfoの"Google"認証情報を使う
← SMTPセッションでSTARTTLSを使う
← mailertable, sendermtのどちらにも一致しない場合
← このSMTPサーバの25番に接続して送信(リレー)
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
12
- 発信ドメインでのルーティングテーブル(YAML)
- mailertableと同じ書式
example.jp:
mailer: 'ESMTP'
host: '192.0.2.253'
port: 25
example.org:
mailer: 'SendGrid'
auth: 'SendGrid'
etc/sendermt
← 発信者が *@example.jpの時は
← Haineko::Relay::SendGridを使う(Web API)
← etc/authinfoの"SendGrid"認証情報を使う
← このSMTPサーバの25番に接続して送信(リレー)
← 発信者が *@example.orgの時は
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
13
- SMTP-AUTH, EmailクラウドのAPI用認証情報(YAML)
- ファイルのパーミッションに注意
Google:
username: '******@gmail.com'
password: 'nekochan22'
SendGrid:
username: 'kijitora'
password: 'nyanko22'
etc/authinfo
← mailertable, sendermtの``auth''で指定したラベル
← SendGrid APIのパスワード(API_KEY)
← Gmailのユーザ名とパスワード
← SendGrid APIのユーザ名(API_USER)
← mailertable, sendermtの``auth''で指定したラベル
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
14
- メールのリレーを許可するクライアントのIPアドレス
- IPアドレスかネットワーク帯域を記述(YAML)
- open-relayは危ないので将来削除するかも
open-relay: 0
relayhosts:
- 127.0.0.1
- 192.0.2.22/32
- 168.254.0.0/16
etc/relayhosts
← ``1''にするとIPアドレスのチェックをしない(危険)
← 許可するIPアドレスかネットワークを配列で列挙
← Net::CIDR::Liteが理解出来る形式で
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
15
- メールを送っても良い宛先のアドレスかドメイン
- このファイルに一致しない宛先には送らない
- open-relayは危ないので将来削除するかも
open-relay: 0
domainpart:
- 'example.co.jp'
recipients:
- 'neko@cat.example.jp'
- 'kijitora@example.com'
etc/recipients
← ``1''にするとどんな宛先にも送れる(危険)
← 送っても良い宛先をドメインで指定(配列で列挙)
← 送っても良い宛先を個別に指定(配列で列挙)
← *@example.co.jp宛はなんでもOK!
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
16
Sending & Reply
メール送信とJSONでの応答
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
17
- sbin/hainekod サンプルスクリプト
$ sbin/hainekod -d start (morboが起動する)
$ sbin/hainekod start (hypnotoadが起動する)
$ morbo --listen 'http://*.2794' script/haineko
$ hypnotoad script/haineko
- psgiファイルを書けばPlackでも動く、たぶん。
Start Haineko
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
18
$ curl 'http://127.0.0.1:2794/submit'
-X POST
-H 'Content-Type: application/json'
-d '{ ehlo: "ホスト名",
mail: "neko@example.jp",
rcpt: [
"kijitora@example.org",
"mikeneko@example.com" ],
body: "ネコと和解せよ",
header: { subject: "ニャー!!", … } }'
メール送信(curl)
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
19
{
"smtp.queueid":"r6DCXsV00649aTl2",
"smtp.response": {
"dsn": "2.0.0",
"error": 0,
"message":[ "Accept for delivery" ],
"command": "QUIT",
"code": "221" },
"smtp.useragent": "ユーザエージェント(USER_AGENT)",
"smtp.recipient": [ "kijitora@example.jp"],
"smtp.addresser": "NNN@example.org",
"smtp.remotehost": "127.0.0.1", "smtp.remoteport":49989
}
正常応答(JSON)
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
20
{
"smtp.queueid":"r6DCXsV00649aTl2",
"smtp.response": {
"dsn": "5.7.1",
"error":1,
"message":[ "Recipient address not permitted" ],
"command": "RCPT",
"code": "533" },
"smtp.useragent": "ユーザエージェント(USER_AGENT)",
"smtp.recipient": [ "kijitora@example.gov"],
"smtp.addresser": "NNN@example.org",
"smtp.remotehost": "127.0.0.1", "smtp.remoteport":49989
}
エラー応答(JSON)
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
21
Repository
github.com/azumakuniyuki/Haineko
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
22
- Perl and SMTP
| Mojoliciousでメール送信APIを作った話
| HTTP-API for sending email
- http://yapcasia.org/2013/talk/show/
f023c72c-dfd4-11e2-8f00-96816aeab6a4
- 夏のうちにもう少し開発をする予定
- 採用されたらHainekoの話をします!
YAPC::Asia Tokyo 2013
Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土)
Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd.
23
終
24

Weitere ähnliche Inhalte

Was ist angesagt? (7)

import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28
 
最近僕が使うようになったPerl 5.10以降の新しいやつ
最近僕が使うようになったPerl 5.10以降の新しいやつ最近僕が使うようになったPerl 5.10以降の新しいやつ
最近僕が使うようになったPerl 5.10以降の新しいやつ
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perl
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
 
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。
 
co.jp への TXT 追加の謎
co.jp への TXT 追加の謎co.jp への TXT 追加の謎
co.jp への TXT 追加の謎
 

Andere mochten auch

Are You A Healthcare Professional Who Doesn't Know What e-Discovery Is
Are You A Healthcare Professional Who Doesn't Know What e-Discovery IsAre You A Healthcare Professional Who Doesn't Know What e-Discovery Is
Are You A Healthcare Professional Who Doesn't Know What e-Discovery Is
Dale Newton
 
H σταύρωση του χριστού
H σταύρωση του χριστούH σταύρωση του χριστού
H σταύρωση του χριστού
teo70
 
Colorado Department of Health Care Policy and Financing NASHP: Making Quality...
Colorado Department of Health Care Policy and Financing NASHP: Making Quality...Colorado Department of Health Care Policy and Financing NASHP: Making Quality...
Colorado Department of Health Care Policy and Financing NASHP: Making Quality...
NASHP HealthPolicy
 
ELS CONSELLS DE LA TORTUGA
ELS CONSELLS DE LA TORTUGA ELS CONSELLS DE LA TORTUGA
ELS CONSELLS DE LA TORTUGA
ESCOLA PRIMER
 
Mumford & Sons
Mumford & SonsMumford & Sons
Mumford & Sons
Zac
 
Snow Patrol
Snow PatrolSnow Patrol
Snow Patrol
Zac
 
Health Reform & the Delivery System: A New Medley of Payment & Incentives
Health Reform & the Delivery System: A New Medley of Payment & IncentivesHealth Reform & the Delivery System: A New Medley of Payment & Incentives
Health Reform & the Delivery System: A New Medley of Payment & Incentives
NASHP HealthPolicy
 
η αλήθεια είναι πολύτιμη
η  αλήθεια  είναι πολύτιμηη  αλήθεια  είναι πολύτιμη
η αλήθεια είναι πολύτιμη
teo70
 
Health Care Reform: Primary Care and Behavioral Health Integration
Health Care Reform:  Primary Care and Behavioral Health IntegrationHealth Care Reform:  Primary Care and Behavioral Health Integration
Health Care Reform: Primary Care and Behavioral Health Integration
NASHP HealthPolicy
 
SuntrupAutomotiveFamily.com_AAA Traffic Safety Index
SuntrupAutomotiveFamily.com_AAA Traffic Safety IndexSuntrupAutomotiveFamily.com_AAA Traffic Safety Index
SuntrupAutomotiveFamily.com_AAA Traffic Safety Index
Suntrup Kia
 

Andere mochten auch (20)

Are You A Healthcare Professional Who Doesn't Know What e-Discovery Is
Are You A Healthcare Professional Who Doesn't Know What e-Discovery IsAre You A Healthcare Professional Who Doesn't Know What e-Discovery Is
Are You A Healthcare Professional Who Doesn't Know What e-Discovery Is
 
H σταύρωση του χριστού
H σταύρωση του χριστούH σταύρωση του χριστού
H σταύρωση του χριστού
 
Presentación peonzas
Presentación peonzasPresentación peonzas
Presentación peonzas
 
Digitalaverktyg b
Digitalaverktyg bDigitalaverktyg b
Digitalaverktyg b
 
Colorado Department of Health Care Policy and Financing NASHP: Making Quality...
Colorado Department of Health Care Policy and Financing NASHP: Making Quality...Colorado Department of Health Care Policy and Financing NASHP: Making Quality...
Colorado Department of Health Care Policy and Financing NASHP: Making Quality...
 
ELS CONSELLS DE LA TORTUGA
ELS CONSELLS DE LA TORTUGA ELS CONSELLS DE LA TORTUGA
ELS CONSELLS DE LA TORTUGA
 
Lpscdsjovemguarda
LpscdsjovemguardaLpscdsjovemguarda
Lpscdsjovemguarda
 
Mumford & Sons
Mumford & SonsMumford & Sons
Mumford & Sons
 
Snow Patrol
Snow PatrolSnow Patrol
Snow Patrol
 
Health Reform & the Delivery System: A New Medley of Payment & Incentives
Health Reform & the Delivery System: A New Medley of Payment & IncentivesHealth Reform & the Delivery System: A New Medley of Payment & Incentives
Health Reform & the Delivery System: A New Medley of Payment & Incentives
 
η αλήθεια είναι πολύτιμη
η  αλήθεια  είναι πολύτιμηη  αλήθεια  είναι πολύτιμη
η αλήθεια είναι πολύτιμη
 
Marknadsföringsworkshop
MarknadsföringsworkshopMarknadsföringsworkshop
Marknadsföringsworkshop
 
Describing our original places
Describing our original placesDescribing our original places
Describing our original places
 
Communicating to whom? Configuring the gendered user in science communication.
Communicating to whom? Configuring the gendered user in science communication.Communicating to whom? Configuring the gendered user in science communication.
Communicating to whom? Configuring the gendered user in science communication.
 
国内インターネット広告費の推移(2005 2014)
国内インターネット広告費の推移(2005 2014)国内インターネット広告費の推移(2005 2014)
国内インターネット広告費の推移(2005 2014)
 
Health Care Reform: Primary Care and Behavioral Health Integration
Health Care Reform:  Primary Care and Behavioral Health IntegrationHealth Care Reform:  Primary Care and Behavioral Health Integration
Health Care Reform: Primary Care and Behavioral Health Integration
 
Série maxximum
Série maxximumSérie maxximum
Série maxximum
 
Campaign slides1 15
Campaign slides1 15Campaign slides1 15
Campaign slides1 15
 
SuntrupAutomotiveFamily.com_AAA Traffic Safety Index
SuntrupAutomotiveFamily.com_AAA Traffic Safety IndexSuntrupAutomotiveFamily.com_AAA Traffic Safety Index
SuntrupAutomotiveFamily.com_AAA Traffic Safety Index
 
21 life changing beliefs
21 life changing beliefs21 life changing beliefs
21 life changing beliefs
 

Ähnlich wie Perl and Email #3 ``Haineko''/Kyoto.pm #5

[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
azumakuniyuki 🐈
 

Ähnlich wie Perl and Email #3 ``Haineko''/Kyoto.pm #5 (12)

JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
 
Perl and eMail at Kansai.pm #13 Meeting in Kyoto
Perl and eMail at Kansai.pm #13 Meeting in KyotoPerl and eMail at Kansai.pm #13 Meeting in Kyoto
Perl and eMail at Kansai.pm #13 Meeting in Kyoto
 
猫とPerl〜応用編1/YAPC Asia Tokyo 2013 LT-THON::Tiny
猫とPerl〜応用編1/YAPC Asia Tokyo 2013 LT-THON::Tiny猫とPerl〜応用編1/YAPC Asia Tokyo 2013 LT-THON::Tiny
猫とPerl〜応用編1/YAPC Asia Tokyo 2013 LT-THON::Tiny
 
RubyGems と Bundler について
RubyGems と Bundler についてRubyGems と Bundler について
RubyGems と Bundler について
 
Rustのタスクモデルについて
RustのタスクモデルについてRustのタスクモデルについて
Rustのタスクモデルについて
 
RubyGems と Bundler について
RubyGems と Bundler についてRubyGems と Bundler について
RubyGems と Bundler について
 
URLで遊ぼう
URLで遊ぼうURLで遊ぼう
URLで遊ぼう
 
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
 
Perl/CGI 入門
Perl/CGI 入門Perl/CGI 入門
Perl/CGI 入門
 
Maiking RIA Apps by Ruby
Maiking RIA Apps by RubyMaiking RIA Apps by Ruby
Maiking RIA Apps by Ruby
 
Echo server implementation for Python
Echo server implementation for PythonEcho server implementation for Python
Echo server implementation for Python
 

Mehr von azumakuniyuki 🐈

Hachioji.pm #40 次のbounceHammer開発中
Hachioji.pm #40 次のbounceHammer開発中Hachioji.pm #40 次のbounceHammer開発中
Hachioji.pm #40 次のbounceHammer開発中
azumakuniyuki 🐈
 
実践的bounceHammer / KOF2013
実践的bounceHammer / KOF2013実践的bounceHammer / KOF2013
実践的bounceHammer / KOF2013
azumakuniyuki 🐈
 
Kansai.pm #15 LT資料「猫とPerl」
Kansai.pm #15 LT資料「猫とPerl」Kansai.pm #15 LT資料「猫とPerl」
Kansai.pm #15 LT資料「猫とPerl」
azumakuniyuki 🐈
 
バウンスメール解析システム BounceHammer
バウンスメール解析システム BounceHammerバウンスメール解析システム BounceHammer
バウンスメール解析システム BounceHammer
azumakuniyuki 🐈
 

Mehr von azumakuniyuki 🐈 (20)

YAPC::Nagoya::Tiny 2019 | Makefile生活
YAPC::Nagoya::Tiny 2019 | Makefile生活YAPC::Nagoya::Tiny 2019 | Makefile生活
YAPC::Nagoya::Tiny 2019 | Makefile生活
 
NSEG勉強会(101)LT: 僕と長野県
NSEG勉強会(101)LT: 僕と長野県NSEG勉強会(101)LT: 僕と長野県
NSEG勉強会(101)LT: 僕と長野県
 
Email is Slack
Email is SlackEmail is Slack
Email is Slack
 
SendGridのない世界 | SendGrid Night in Osaka #2
SendGridのない世界 | SendGrid Night in Osaka #2SendGridのない世界 | SendGrid Night in Osaka #2
SendGridのない世界 | SendGrid Night in Osaka #2
 
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 OsakaHokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
 
メールフォームからメールを送る近代的な方法 | YAPC::Kansai 2017 OSAKA
メールフォームからメールを送る近代的な方法 | YAPC::Kansai 2017 OSAKAメールフォームからメールを送る近代的な方法 | YAPC::Kansai 2017 OSAKA
メールフォームからメールを送る近代的な方法 | YAPC::Kansai 2017 OSAKA
 
僕と北海道とPerl、それとMakefileも。
僕と北海道とPerl、それとMakefileも。僕と北海道とPerl、それとMakefileも。
僕と北海道とPerl、それとMakefileも。
 
PerlモジュールをRubyに移植する時に落ちた穴々
PerlモジュールをRubyに移植する時に落ちた穴々PerlモジュールをRubyに移植する時に落ちた穴々
PerlモジュールをRubyに移植する時に落ちた穴々
 
自動構築と自動テスト〜インフラのコード化とクラウドの優位性
自動構築と自動テスト〜インフラのコード化とクラウドの優位性自動構築と自動テスト〜インフラのコード化とクラウドの優位性
自動構築と自動テスト〜インフラのコード化とクラウドの優位性
 
Hachioji.pm #40 次のbounceHammer開発中
Hachioji.pm #40 次のbounceHammer開発中Hachioji.pm #40 次のbounceHammer開発中
Hachioji.pm #40 次のbounceHammer開発中
 
2013 11-30-mailqueue-monitoring
2013 11-30-mailqueue-monitoring2013 11-30-mailqueue-monitoring
2013 11-30-mailqueue-monitoring
 
Plackで実装したメールサーバ"Haineko"のその後/Shibuya.pl #1
Plackで実装したメールサーバ"Haineko"のその後/Shibuya.pl #1 Plackで実装したメールサーバ"Haineko"のその後/Shibuya.pl #1
Plackで実装したメールサーバ"Haineko"のその後/Shibuya.pl #1
 
Perlの書籍紹介/KOF2013
Perlの書籍紹介/KOF2013Perlの書籍紹介/KOF2013
Perlの書籍紹介/KOF2013
 
実践的bounceHammer / KOF2013
実践的bounceHammer / KOF2013実践的bounceHammer / KOF2013
実践的bounceHammer / KOF2013
 
JSONでメール送信(Haineko) / KOF2013
JSONでメール送信(Haineko) / KOF2013JSONでメール送信(Haineko) / KOF2013
JSONでメール送信(Haineko) / KOF2013
 
Kansai.pm #15 LT資料「猫とPerl」
Kansai.pm #15 LT資料「猫とPerl」Kansai.pm #15 LT資料「猫とPerl」
Kansai.pm #15 LT資料「猫とPerl」
 
Namba.pm #0 LT資料
Namba.pm #0 LT資料Namba.pm #0 LT資料
Namba.pm #0 LT資料
 
KOF 2011 bounceHammerによるバウンスメール解析の技術
KOF 2011 bounceHammerによるバウンスメール解析の技術KOF 2011 bounceHammerによるバウンスメール解析の技術
KOF 2011 bounceHammerによるバウンスメール解析の技術
 
bounceHammerその後、導入事例、これから。
bounceHammerその後、導入事例、これから。bounceHammerその後、導入事例、これから。
bounceHammerその後、導入事例、これから。
 
バウンスメール解析システム BounceHammer
バウンスメール解析システム BounceHammerバウンスメール解析システム BounceHammer
バウンスメール解析システム BounceHammer
 

Kürzlich hochgeladen

Kürzlich hochgeladen (12)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 

Perl and Email #3 ``Haineko''/Kyoto.pm #5

  • 1. Perl and Email #3 @azumakuniyuki Cubicroot Co. Ltd. Kyoto.pm #05 in 京都::はてなさん 2013/07/13(土) Emailクラウド風メール送信用HTTP API "Haineko" 七 月 十 七 日 加 筆 修 正
  • 2. 自己紹介 あずま@京都 @azumakuniyuki 鯖管 プログラマ たまに Perl +(猫) Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 2
  • 3. 作ったもの - bounceHammer - バウンスメール解析するやつ - YAML/JSONで出る - http://bouncehammer.jp/ - Acme::Nyaa - 初CPANモジュール/猫系 - 神と和解せよ => ネコと和解せよ - 祇園祭です => 祇園祭ですニャー Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 3
  • 4. Perl and Email #3 Emailクラウド風メール送信用HTTP API "Haineko" Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 4
  • 5. Haineko``はいねこ'' Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 5
  • 6. HTTP API INTO ESMTP K=undef O=undef Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 6
  • 7. - リレーサーバ(キューは持たない) - HTTPでメールを送る => Mojolicious - 他のSMTPサーバかEmailクラウドへリレー - 応答は全てJSON - Hainekoに渡すときの認証は未実装 - $REMOTE_ADDRでリレー制限(relayhosts) - 許可された宛先のみに送信(recipients) Hainekoの概要 Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 7
  • 8. Architecture Hainekoの処理の流れ、全体図と部分図。 Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 8
  • 9. Haineko Flow Haineko HTTP Request HTTP Request ESMTP Relay Email Cloud SendGrid(実装済) Postmark(まだ) MailChimp(まだ) AmazonSES(まだ) HTTP Listen on 2794 HTTPS Listen on 2894 mailertable/sendermt HTTP Response ESMTP Response HTTP Response POST HTTP CLIENT Browser / wget / curl to JSON Any SMTP Server smtp.example.jp:25 tls.example.com:465 smtp.gmail.com:587 Another Haineko Server SMTP HTTP / HTTPS SMTP-AUTH STARTTLS PIPELINING Check REMOTE_ADDR Check RCPT_TO Rejected Cannot connect JSON JSON JSON JSON JSON Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 9
  • 10. ESMTP Relay Haineko ESMTP or HTTP Response etc/mailertable etc/sendermt etc/mailertable:default 宛先アドレスのドメインに一致 発信アドレスのドメインに一致 一致するドメインなし defaultの定義がない 127.0.0.1:25にリレー 一致する発信アドレスのドメインなし 一致する宛先アドレスのドメインなし to JSON 127.0.0.1でSMTPdが動いていない 127.0.0.1:25 SMTP SMTP HTTP / HTTPS HTTP/HTTPS Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 10
  • 11. Table Files 各種の制限項目、経路テーブルなど。 Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 11
  • 12. - 宛先ドメインでのルーティングテーブル(YAML) default: mailer: 'ESMTP' host: '192.0.2.22' port: 25 example.com: mailer: 'ESMTP' host: 'smtp.gmail.com' port: 587 auth: 'Google' starttls: 1 etc/mailertable ← 宛先が *@example.comの時は ← ESMTPで ← Gmailの587番ポートに接続 ← etc/authinfoの"Google"認証情報を使う ← SMTPセッションでSTARTTLSを使う ← mailertable, sendermtのどちらにも一致しない場合 ← このSMTPサーバの25番に接続して送信(リレー) Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 12
  • 13. - 発信ドメインでのルーティングテーブル(YAML) - mailertableと同じ書式 example.jp: mailer: 'ESMTP' host: '192.0.2.253' port: 25 example.org: mailer: 'SendGrid' auth: 'SendGrid' etc/sendermt ← 発信者が *@example.jpの時は ← Haineko::Relay::SendGridを使う(Web API) ← etc/authinfoの"SendGrid"認証情報を使う ← このSMTPサーバの25番に接続して送信(リレー) ← 発信者が *@example.orgの時は Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 13
  • 14. - SMTP-AUTH, EmailクラウドのAPI用認証情報(YAML) - ファイルのパーミッションに注意 Google: username: '******@gmail.com' password: 'nekochan22' SendGrid: username: 'kijitora' password: 'nyanko22' etc/authinfo ← mailertable, sendermtの``auth''で指定したラベル ← SendGrid APIのパスワード(API_KEY) ← Gmailのユーザ名とパスワード ← SendGrid APIのユーザ名(API_USER) ← mailertable, sendermtの``auth''で指定したラベル Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 14
  • 15. - メールのリレーを許可するクライアントのIPアドレス - IPアドレスかネットワーク帯域を記述(YAML) - open-relayは危ないので将来削除するかも open-relay: 0 relayhosts: - 127.0.0.1 - 192.0.2.22/32 - 168.254.0.0/16 etc/relayhosts ← ``1''にするとIPアドレスのチェックをしない(危険) ← 許可するIPアドレスかネットワークを配列で列挙 ← Net::CIDR::Liteが理解出来る形式で Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 15
  • 16. - メールを送っても良い宛先のアドレスかドメイン - このファイルに一致しない宛先には送らない - open-relayは危ないので将来削除するかも open-relay: 0 domainpart: - 'example.co.jp' recipients: - 'neko@cat.example.jp' - 'kijitora@example.com' etc/recipients ← ``1''にするとどんな宛先にも送れる(危険) ← 送っても良い宛先をドメインで指定(配列で列挙) ← 送っても良い宛先を個別に指定(配列で列挙) ← *@example.co.jp宛はなんでもOK! Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 16
  • 17. Sending & Reply メール送信とJSONでの応答 Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 17
  • 18. - sbin/hainekod サンプルスクリプト $ sbin/hainekod -d start (morboが起動する) $ sbin/hainekod start (hypnotoadが起動する) $ morbo --listen 'http://*.2794' script/haineko $ hypnotoad script/haineko - psgiファイルを書けばPlackでも動く、たぶん。 Start Haineko Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 18
  • 19. $ curl 'http://127.0.0.1:2794/submit' -X POST -H 'Content-Type: application/json' -d '{ ehlo: "ホスト名", mail: "neko@example.jp", rcpt: [ "kijitora@example.org", "mikeneko@example.com" ], body: "ネコと和解せよ", header: { subject: "ニャー!!", … } }' メール送信(curl) Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 19
  • 20. { "smtp.queueid":"r6DCXsV00649aTl2", "smtp.response": { "dsn": "2.0.0", "error": 0, "message":[ "Accept for delivery" ], "command": "QUIT", "code": "221" }, "smtp.useragent": "ユーザエージェント(USER_AGENT)", "smtp.recipient": [ "kijitora@example.jp"], "smtp.addresser": "NNN@example.org", "smtp.remotehost": "127.0.0.1", "smtp.remoteport":49989 } 正常応答(JSON) Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 20
  • 21. { "smtp.queueid":"r6DCXsV00649aTl2", "smtp.response": { "dsn": "5.7.1", "error":1, "message":[ "Recipient address not permitted" ], "command": "RCPT", "code": "533" }, "smtp.useragent": "ユーザエージェント(USER_AGENT)", "smtp.recipient": [ "kijitora@example.gov"], "smtp.addresser": "NNN@example.org", "smtp.remotehost": "127.0.0.1", "smtp.remoteport":49989 } エラー応答(JSON) Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 21
  • 22. Repository github.com/azumakuniyuki/Haineko Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 22
  • 23. - Perl and SMTP | Mojoliciousでメール送信APIを作った話 | HTTP-API for sending email - http://yapcasia.org/2013/talk/show/ f023c72c-dfd4-11e2-8f00-96816aeab6a4 - 夏のうちにもう少し開発をする予定 - 採用されたらHainekoの話をします! YAPC::Asia Tokyo 2013 Kyoto.pm #5 in 京都::はてなさん 2013/07/13(土) Perl and Email #3 ``Haineko'' @azumakuniyuki / Cubicroot Co. Ltd. 23