goo

メールの送信方法

◆一覧リスト
HSP Ver3.0
HSP Ver2.61
ブログ関連
その他
★人気blogランキング

「メール送信方法」 ◆HSP Ver3の「hspsock.dll」を使用
■SMTP Simple Mail Transfer Protocol
TCPで、ポート25を使用します。 以下、メソッドを送る事で、レスポンスが返ります。 ※「ソケットの使用」参照
メソッド説明
EHLO接続を開始します。
HELO接続を開始します。 (現在でも使われていますが、こちらは古いため上記「EHLO」を使用)
MAIL FROM : 送信者のメールアドレスを送信、設定します。
RCPT TO : 宛て先のアドレスを送信、設定します。 複数設定することで、一度に複数先に送信可能。
DATAデータの送信を開始します。 この後、ヘッダや、メール本文を送信します。(命令が複数でも可能) このメソッドを開始してデータの送信が終了するまでは、 「sockget」等は使わないようにします。 また、ピリオド「.」を送信することでデータの送信は終了します。 以下、DATAを送信してから終了するまでに可能なメソッドです。
メソッド説明
Subject : 用件を設定します。 JIS変換して、BASE64エンコードが必要 ※下記サンプルではしてませんので英文字のみ可能です
X-Mailer : メールソフトとバージョンを登録します。
Reply-To : 返信先を設定します。
NOOP何もしません。 接続されてるか調べたりします。
QUIT接続を終了します。
■ステータスコード
ステータスコード説明
100~199コマンドの確認待ち
200RSETやNOOPに対する正常終了の応答コード それ以外は正しくない応答コード
211システム、ヘルプの応答
220サービスの準備ができています。 「EHLO」の返答など。
221「QUIT」の返答。
334ダイジェスト待ち
354メソッド「DATA」に対する返答
400~499一時的なエラー
500~599恒久的なエラー
■簡単な流れ
1.「hspsock.as」をインクルードします
例) #include "hspsock.as"
2.ポート25でソケットを接続します
例) //※「serv_addr」はプロバイダのSMTPサーバ名 sockopen 1234 , serv_addr , 25
3.「EHLO」を送信
4.「MAIL FROM:」を送信
5.「RCPT TO:」を送信
6.「DATA」を送信
7.ピリオド「.」を送信して「DATA」終了
8.「QUIT」を送信して接続終了
9.通信を切断します
例) sockclose 1234
■サンプル 件名に漢字を使用すると文字化けします。 メール本文も、環境により文字化けする可能性があります。 以下は、あくまでメール送信のテストサンプルです。
実行結果
送信後の画面 ブラウザでの読込画面 「English」・・・
サンプル ソースコード
/////////////////////////////////////////////////
//インクルード
#include "hspsock.as"

/////////////////////////////////////////////////
//定義
#define		SOCKET_ID 1000
#define		PORT      25

/////////////////////////////////////////////////
//関数登録
#uselib "user32.dll"
	#func SendMessageA "SendMessageA" int,int,int,int
	#func EnableWindow "EnableWindow" int,int

/////////////////////////////////////////////////
//変数
	sdim	serv_addr , 1024
	sdim	send_addr , 1024
	sdim	recv_addr , 1024
	sdim	subject   , 1024
	sdim	log       , 1024
	sdim	mb_data   , 1024
	sdim	log_data  , 1024
	sdim	string    , 1024

/////////////////////////////////////////////////
//ウィンドウ作成
	screen 0 , 400 , 320
	title "メール送信 サンプル"
	color 224,224,224 : boxf

	color : font "" , 10	
	pos  5 , 5 : mes "SMTPサーバ"
	pos  5 , 25: mes "送信元メール"
	pos  5 , 45: mes "送信先メール"
	pos  5 , 65: mes "件名"

	pos 70 , 0 : input serv_addr , 280 , 20 , 1024 //0
	pos 70 ,20 : input send_addr , 280 , 20 , 1024 //1
	pos 70 ,40 : input recv_addr , 280 , 20 , 1024 //2
	pos 70 ,60 : input subject   , 280 , 20 , 1024 //3

	objsize 50 , 80 : pos 350,0
	button "送信" , *send_mail //4

	pos 0 , 80 : mesbox mb_data , 400 , 120 //5

	pos 5,205 : mes "通信ログ"
	pos 0 , 220 : mesbox log_data,400,100,4 //6
	hlog = objinfo(6,2)
stop

/////////////////////////////////////////////////
//送信(string)と受信(log)のサブルーチン
*send_recv
	sockput string+"¥n" , SOCKET_ID
	log="送信   : "+string : gosub *log_set
	wait 100
	sockcheck SOCKET_ID
	if stat!=0 : return
	sockget log , 1024 , SOCKET_ID
	log="受信   : "+log : gosub *log_set

return

/////////////////////////////////////////////////
//サーバからデータ取得
*send_mail
	EnableWindow objinfo(4,2),0

	//ソケットの初期化と接続
	log="接続中  : "+serv_addr
	gosub *log_set
	sockopen SOCKET_ID , serv_addr , PORT
	if stat != 0{
		log="接続エラー!"
		gosub *log_set
		stop
	}
	sockget log , 1024 , SOCKET_ID
	log="接続完了: "+log : gosub *log_set

	//SMTPサービスの開始
	string="EHLO "+serv_addr
	gosub *send_recv

	//送信元メールアドレスを送信
	string="MAIL FROM :"+send_addr
	gosub *send_recv

	//送信先メールアドレスを送信
	string="RCPT TO :"+recv_addr
	gosub *send_recv

	//データ送信の開始準備
	string="DATA"
	gosub *send_recv

	//X-Mailer: 送信
	string="X-Mailer : HSPSOCKET-TEST-Mailer"
	gosub *send_recv

	//Subject: 送信
	string="Subject:"+subject
	gosub *send_recv

	//空行 送信
	string="" : gosub *send_recv

	//本文送信
	string=mb_data
	gosub *send_recv

	//データ送信の終了
	string="."
	gosub *send_recv

	//SMTPサービスの終了
	string="QUIT"
	gosub *send_recv

	//ソケットを切断
	sockclose SOCKET_ID
	log="切断完了"
	gosub *log_set

	sock_flag=0
	EnableWindow objinfo(4,2),1
stop

/////////////////////////////////////////////////
//ログ(log)の書き込み
*log_set
	string=strf("[%02d:",gettime(4))
	string+=strf("%02d:",gettime(5))
	string+=strf("%02d] ",gettime(6))
	notesel log_data
	noteadd string+log , -1
	objprm 6 , log_data

	SendMessageA hlog,0xBA,0,0
	SendMessageA hlog,0xB6,0,stat
return
コメント ( 2 ) | Trackback ( 0 )
« ソケットを使... 簡単タイマー »
 
コメント
 
 
 
はじめまして (Luna)
2006-07-22 14:17:38
はじめまして。ヘボHSPプログラマ、Lunaです。

挨拶というか、そんな感じのをしにきました。



このブログいいですね。サンプルも役に立つものばかりです。ステータスバーやツールチップ作成、役に立ちました。



これからもちょくちょく訪問させていただきます。それでは。
 
 
 
はじめまして (hiro)
2006-07-22 19:56:18
はじめまして。

ご訪問ありがとうございます。



サンプル、役立って良かったです。
 
コメントを投稿する
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。
数字4桁を入力し、投稿ボタンを押してください。