SlideShare una empresa de Scribd logo
1 de 52
Descargar para leer sin conexión
メールフォーム
から
メールを送る
近代的な方法
@azumakuniyuki
YAPC::Kansai 2017 Osaka 2017/03/4(土) MOTEXさん
メールフォーム
から
メールを送る
近代的な方法
@azumakuniyuki
YAPC::Kansai 2017 Osaka 2017/03/4(土) MOTEXさん
メール送信
温故知新
自己紹介
@azumakuniyuki (東邦之)
株式会社Cubicroot (京都市)
3
- インフラエンジニア(ラック実装から構築・保守)
- *BSD, Linux, 古くはSolaris, SunOS
- ネットワークの設計・サーバの構築と保守
- インフラのコード化支援(Ansible,Serverspec)
- 数年前からプログラマー
- 主にPerl, Rubyも
- サイトの開発(バックエンド)
- メール関連の開発
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
ニャーン
4YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
子
曰
温
故
而
知
新
可
以
為
師
矣
論
語
・
爲
政
第
二
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
子
曰
温
故
而
知
新
可
以
為
師
矣
論
語
・
爲
政
第
二
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
7
/usr/sbin/sendmail
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
/usr/sbin/sendmail
8
- 信頼と実績・歴史と伝統のSendmailそのもの
- -rwxr-sr-x root smmsp sendmail*
- setgidされたやつ
- おなじみのコマンドは全部/usr/sbin/sendmailが実体
- /usr/bin/newaliases
- /usr/bin/mailq
必ずある(V8Sendmail)
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
9
- /etc/alternatives/mta
- Postfixと同居しているパターン多い
- /usr/sbin/alternatives(8)で切り替えられる
- /usr/sbin/sendmail.sendmail
- /usr/sbin/sendmail.postfix
必ずある(何かと同居)
/usr/sbin/sendmail
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
10
- Sendmailを駆逐したい勢力
- Sendmailが捨てられて何かに置き換わっている
- /var/qmail/bin/sendmail
- /usr/bin/exim
- macOS $ strings /usr/sbin/sendmail | grep postfix
必ずある(入れ替わってる?)
/usr/sbin/sendmail
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
11
- どれも本家の/usr/sbin/sendmailとある程度の互換性がある
- my $sendmail = '/usr/sbin/sendmail -t';
- php.ini/sendmail_path=
- ; (default: "sendmail -t -i").
- CGI::FormBuilder
- qw(/usr/lib/sendmail /usr/sbin/sendmail /usr/bin/send...
- LWP::Protocol::mailto
- qw(/usr/sbin/sendmail /usr/lib/sendmail /usr/ucblib/s...
存在する前提になってる
/usr/sbin/sendmail
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
12
$ hostname | mail -s 'Nyaan' neko@nyaan.jp
$ ls -laF `which mail`
lrwxrwxrwx ... /usr/bin/mail -> mailx*
$ strings /usr/bin/mailx | grep sendmail
/usr/sbin/sendmail
存在する前提になってる
/usr/sbin/sendmail
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
13
無いといろいろマズい、たぶん
/usr/sbin/sendmail
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
14
127.0.0.1:25
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
15
25 = SMTP
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
16
$ netstat -na | grep LISTEN | grep -E ':(25|587)'
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
# /usr/sbin/lsof -i:25
COMMAND PID USER ...
sendmail 2401 root ... localhost:smtp (LISTEN)
MTAでなくても動いてる
127.0.0.1:25
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
17
# mailq -Ac
/var/spool/clientmqueue (1 request)
...
v22IJrNi0022 ... Fri Mar 3 02:22 root
(Deferred: Connection refused by [127.0.0.1])
neko@nyaan.jp
# crontabの結果がメールで来ないとか、いろいろ困る。
動いてないとキューに溜まる
127.0.0.1:25
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
18
動いている前提になっている
localhost:25
- Mail::Sendmail
- 'smtp' => [ qw( localhost ) ],
- Email::Sender
- ::Transport::SMTP
- has host => (..., default => sub { 'localhost' });
- Email::Send::SMTP
- my $host = delete($args{Host}) || 'localhost';
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
19
To: neko@nyaan.jp
ニャーン
里親になる!
なまえ
メール
でんわ
@
送信
/usr/bin/mail*
smtp.nyaan.jp:25
Sendmail, Postfix, ...
~/dead.letter
Mail
Queue
127.0.0.1:25
/usr/sbin/sendmail*
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
20
192.0.2.222:25
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
21
別のSMTPサーバを経由する
192.0.2.222:25
- 多くのWebサーバから外へ出るメールのゲートウェイとして
- ゲートウェイ?
- ウィルスチェックをするとか
- 特定のFrom:なメールだけ通過させる
- 野良メールはゲートウェイで捨てる
- 優先度(Precedence:)別に処理するとか
- 登録完了系はすぐに送信
- お知らせ系はキューに貯めて毎時0分に送信
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
22
今は外へメールが送りにくい
192.0.2.222:25
- OP25B: Outbound Port 25 Blocking
- 一般家庭の回線から外部のSMTPへ接続できない
- ISPがブロックしている
- 固定IPアドレスの回線なら外向きのSMTP接続も大丈夫
- SPF: Sender Policy Framework
- DNSのTXTレコードで設定されている
- 「**@nyaan.jpは192.0.2.222からしか送信しませんよ」
- ↑TXTに書いていないとこからのメールは「迷惑メール」行き?
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
23
To: neko@nyaan.jp
ニャーン
里親になる!
なまえ
メール
でんわ
@
送信
/usr/bin/mail*
smtp.nyaan.jp:25
Sendmail, Postfix, ...
~/dead.letter
Mail
Queue
127.0.0.1:25
/usr/sbin/sendmail*
192.0.2.222:25
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
24
smtp.gmail.com:587
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
25
587 = Submission
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
26
SMTP認証を経てメール投函
smtp.gmail.com:587
- 587 = Submission
- <input type = 'submit' value = '送信'>
- 素数
- 587番ポートは認証が必須(で設定されているのが殆ど)
- OP25Bな環境では(ほぼ)唯一のメール送信方法
- ほとんどのメールサーバはSubmissionに対応している
- Gmail, Office365, Yahoo!, SendGrid, Amazon SES
- 会社のメールサーバとか(Sendmail, Postfix, ...)
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
27
Email::Sender
smtp.gmail.com:587
use Email::Sender;
my $SMTP = Email::Sender::Transport::SMTP->new(
'host' => 'smtp.gmail.com',
'port' => 587,
'sasl_username' => '*********@gmail.com',
'sasl_password' => '*************'
);
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
28
Net::SMTP or Net::SMTPS
smtp.gmail.com:587
use Net::SMTP; # TLSで通信するならNet::SMTPS;
use Authen::SASL;
my $smtp = Net::SMTP->new('smtp.gmail.com', 'Port'=>587);
my $auth = Authen::SASL->new('callback' => {
'user' => '*******@gmail.com',
'pass' => '********'
};
$smtp->auth($auth);
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
29
Sendmail (/etc/mail)
smtp.gmail.com:587
# grep authinfo sendmail.cf
Kauthinfo hash /etc/mail/authinfo
# vi authinfo
Authinfo:smtp.gmail.com "U:**@gmail.com" "P:**" "M:plain"
# makemap hash authinfo < authinfo
# chmod 0600 ./authinfo
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
30
Postfix (/etc/mail/postfix)
smtp.gmail.com:587
# grep smtp_sasl main.cf
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/authinfo
# vi authinfo
[smtp.gmail.com]:587 ***@gmail.com:****
# /usr/sbin/postmap authinfo
# chmod 0600 ./authinfo*
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
31
To: neko@nyaan.jp
ニャーン
里親になる!
なまえ
メール
でんわ
@
送信
/usr/bin/mail*
smtp.nyaan.jp:25
smtp.GMail.com:587
Sendmail, Postfix, ...
~/dead.letter
Mail
Queue
127.0.0.1:25
/usr/sbin/sendmail*
192.0.2.222:25
#! /usr/bin/env perl
use Net::SMTP;
use Email::MIME;
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
32
「温故」編まとめ
SMTP or Submission
a. /usr/sbin/sendmailが要る
- コマンドラインでも送れるし
b. 127.0.0.1(localhost)の25番ポートでMTAが動いている
- Net::SMTPとか使っても送れる
c. 25番ポートにSMTP接続できる別サーバが要る
- WebサーバでMTAが動いていない時のため
d. 587番ポートで認証できるアカウントとサーバが要る
- OP25Bでブロックされている時
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
子
曰
温
故
而
知
新
可
以
為
師
矣
論
語
・
爲
政
第
二
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
34
443 = HTTPS
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
35
メール配信サービスのAPI
HTTP API
- 有名且つ大きいところ
- Amazon SES https://aws.amazon.com/jp/ses
- SendGrid https://sendgrid.kke.co.jp/
- 信頼と実績・歴史と伝統のSMTPインターフェイスもある
- Submission(認証して)で送る
- SMTPアレルギーが無いなら楽かも、たぶん。
- HTTP(HTTPS)で送信する方が速い
- 大量に送るならHTTP-APIを使う方が良い
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
36
AmazonSESのモジュール
HTTP API
- Amazon::SES
- 依存: [JSON::XS, Moo, LWP::UserAgent, ...]
- Net::AWS::SES
- 依存: [HTTP::Headers, LWP::UserAgent, MIME::*]
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
37
SendGridのモジュール
HTTP API
- Mojo::SendGrid (Mojolicious)
- 2016年3月に登場した(新しい!)
- Mail::SendGrid
- 2011年からある
- 依存: [HTTP::Tiny, IO::Socket::SSL, JSON, Moo, ...]
- WebService::SendGrid
- 依存: [JSON::XS, Moose, DateTime::Formt::HTTP, ...]
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
38
僕?
HTTP API
use Furl;
my $http = Furl->new(...);
my $mail = {
'to' => 'neko@nyaan.jp',
'from' => 'kijitora@example.jp',
'subject' => 'Nyaan',
'text' => Encode::encode('UTF-8', 'にゃーん'), ... };
$http->post('https://sendgrid.net/api/mail.send.json',, $mail);
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
39
依存が少ないのを選んでる
HTTP API
- 依存が沢山あるモジュールは好みでは無い
- Perlのコアモジュールなら少しぐらいOK
- 開発時間 < コードが動いている時間
- 依存は少ない方がええやんね
- 極少人数開発が多いし
- 依存先モジュールの変更点を追いかけるのは大変やし...
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
40
To: neko@nyaan.jp
ニャーン
里親になる!
なまえ
メール
でんわ
@
送信
/usr/bin/mail*
smtp.nyaan.jp:25
smtp.GMail.com:587
Sendmail, Postfix, ...
~/dead.letter
Mail
Queue
127.0.0.1:25
/usr/sbin/sendmail*
192.0.2.222:25
email.us-east-1...:443
sendgrid.com:443
#! /usr/bin/env perl
use Furl;
use Email::MIME;
#! /usr/bin/env perl
use Net::SMTP;
use Email::MIME;
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
41
SMTP
or
HTTP
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
42
どっちが良いの?
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
43
SMTPの良いところ
SMTP or HTTP
- MTAが操作できるなら非常に柔軟なことができる
- 手持ちのSMTP(Submission)アカウントで送信OK
- Gmail, Yahoo!でなくても自前で建てたサーバ経由でもOK
- そもそも昔からある汎用的な技術で枯れている!
- 選択肢が多い
- Sendmail, Postfix, qmail, Exim4, OpenSMTPD, Exchange,
- qpsmtpd
- コマンドラインから手軽に送信(mailx, telnet)
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
44
HTTPの良いところ
SMTP or HTTP
- MTA(SendmailやPostfixとか)が動いてなくてもOK
- そもそもSMTPに関わらなくても良い
- Webサイトに組み込みやすい
- メールキューの監視・管理をしなくても良い
- 外に出やすい(80, 443だけ外出OKとかOP25Bは無関係とか)
- テンプレート機能とかメール送信以外が充実
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
45
SMTPのイマイチなところ
SMTP or HTTP
- MTA(Sendmail, Postfix, ...)が必要になることが多い
- Sendmailは難解と言われる
- PostfixもSMTPの知識が無いと難しい
- キューの管理(たくさん滞留すると大変)
- 国内の携帯電話宛とか特に
- DNSのことも気にせなアカン
- 外出しにくい(OP25BとかSPFとか)
- ロストテクノロジー
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
46
HTTPのイマイチなところ
SMTP or HTTP
- 証明書とか面倒くさい
- ちょっとテストしたいだけやのに
- キューの制御ができない
- 一旦エンドポイントに渡した後は何もできない
- Suppressionリストが共有(Amazon SES)
- 同じリージョン内でバウンスしたアドレスには送れない
- 国内の携帯電話宛では厄介
- バウンス情報が少なすぎる(SendGrid)
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
47
適材適所
二者択一では無い
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
48
To: neko@nyaan.jp
ニャーン
里親になる!
なまえ
メール
でんわ
@
送信
/usr/bin/mail*
smtp.nyaan.jp:25
smtp.GMail.com:587
Sendmail, Postfix, ...
~/dead.letter
Mail
Queue
127.0.0.1:25
/usr/sbin/sendmail*
192.0.2.222:25
email.us-east-1...:443
sendgrid.com:443
#! /usr/bin/env perl
use Furl;
use Email::MIME;
#! /usr/bin/env perl
use Net::SMTP;
use Email::MIME;
127.0.0.1:2794
メールのヘッダと本文をJSON
で書いてHTTP POST
Haineko
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
49
メールを送った後
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
50
バウンス処理しましょ
Email Bounces
- メールアドレスは水物・ナマモノ
- Perlなら良いモジュールがある!
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
51
メールを送った後
Sisimai
http://libsisimai.org/
YAPC::Kansai 2017 Osaka | 2017/03/04(土) MOTEXさん
メールフォームからメールを送る近代的な方法 @azumakuniyuki
終

Más contenido relacionado

Destacado

React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
Yukiya Nakagawa
 

Destacado (20)

First step of Performance Tuning
First step of Performance TuningFirst step of Performance Tuning
First step of Performance Tuning
 
僕と北海道とPerl、それとMakefileも。
僕と北海道とPerl、それとMakefileも。僕と北海道とPerl、それとMakefileも。
僕と北海道とPerl、それとMakefileも。
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南
 
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
 
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れるレガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
 
H2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのかH2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのか
 
今だからこそ振り返ろう!OWASP Top 10
今だからこそ振り返ろう!OWASP Top 10今だからこそ振り返ろう!OWASP Top 10
今だからこそ振り返ろう!OWASP Top 10
 
Twitterの被ブロック数可視化ツールを作ってみた
Twitterの被ブロック数可視化ツールを作ってみたTwitterの被ブロック数可視化ツールを作ってみた
Twitterの被ブロック数可視化ツールを作ってみた
 
開発の本質:チケット数を1/100にする方法
開発の本質:チケット数を1/100にする方法開発の本質:チケット数を1/100にする方法
開発の本質:チケット数を1/100にする方法
 
Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack botPython × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack bot
 
サーバーレスでシステムを開発する時に⼤切な事
サーバーレスでシステムを開発する時に⼤切な事サーバーレスでシステムを開発する時に⼤切な事
サーバーレスでシステムを開発する時に⼤切な事
 
ハードディスクの正しい消去(2015.7)
ハードディスクの正しい消去(2015.7)ハードディスクの正しい消去(2015.7)
ハードディスクの正しい消去(2015.7)
 
できる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャできる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャ
 
PerlモジュールをRubyに移植する時に落ちた穴々
PerlモジュールをRubyに移植する時に落ちた穴々PerlモジュールをRubyに移植する時に落ちた穴々
PerlモジュールをRubyに移植する時に落ちた穴々
 
人工知能と機械学習の違いって?
人工知能と機械学習の違いって?人工知能と機械学習の違いって?
人工知能と機械学習の違いって?
 
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
 
AWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべことAWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべこと
 
10年モノ熟成Perlとの付き合い方
10年モノ熟成Perlとの付き合い方10年モノ熟成Perlとの付き合い方
10年モノ熟成Perlとの付き合い方
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから
 
Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術
 

Más de azumakuniyuki 🐈

[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
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 🐈
 

Más de 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
 
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
 
SendGridのない世界 | SendGrid Night in Osaka #2
SendGridのない世界 | SendGrid Night in Osaka #2SendGridのない世界 | SendGrid Night in Osaka #2
SendGridのない世界 | SendGrid Night in Osaka #2
 
自動構築と自動テスト〜インフラのコード化とクラウドの優位性
自動構築と自動テスト〜インフラのコード化とクラウドの優位性自動構築と自動テスト〜インフラのコード化とクラウドの優位性
自動構築と自動テスト〜インフラのコード化とクラウドの優位性
 
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
 
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〜応用編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
 
Perl and Email #3 ``Haineko''/Kyoto.pm #5
Perl and Email #3 ``Haineko''/Kyoto.pm #5Perl and Email #3 ``Haineko''/Kyoto.pm #5
Perl and Email #3 ``Haineko''/Kyoto.pm #5
 
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資料
 
最近僕が使うようになったPerl 5.10以降の新しいやつ
最近僕が使うようになったPerl 5.10以降の新しいやつ最近僕が使うようになったPerl 5.10以降の新しいやつ
最近僕が使うようになったPerl 5.10以降の新しいやつ
 
Perl and Email #2/Kansai.pm第14回ミーティング@京都
Perl and Email #2/Kansai.pm第14回ミーティング@京都Perl and Email #2/Kansai.pm第14回ミーティング@京都
Perl and Email #2/Kansai.pm第14回ミーティング@京都
 
KOF 2011 bounceHammerによるバウンスメール解析の技術
KOF 2011 bounceHammerによるバウンスメール解析の技術KOF 2011 bounceHammerによるバウンスメール解析の技術
KOF 2011 bounceHammerによるバウンスメール解析の技術
 

メールフォームからメールを送る近代的な方法 | YAPC::Kansai 2017 OSAKA