【コーディング】ブログを簡単に見るヤツ10
sendmailの設定が出来たのでメール送信処理です。
メールを送信するタイミングは、
・アカウント登録処理。
・メールアドレス変更処理。
・メール送信時間になった時。
↑の3つかな。この処理の時にメール送信処理を行う。
必要なパラメータ
・宛先
・件名
・本文
処理の流れ
1.mb_stringの初期化
2.送信パラメータの初期化
3.MIMEヘッダーの設定
4.MAILオブジェクトの生成
5.本文のエンコード(JIS)
6.送信
7.エラーチェック → エラーがあった場合は、X-StatにERR_MAIL(504)を設定してレスポンス。
public static function send($rcpt, $subject, $body)
{
mb_language("japanese");
mb_internal_encoding("UTF-8");
$params["host"] = "メールサーバのホスト";
$params["port"] = ポート番号;
$params["auth"] = TRUE;
$params["username"] = "sendmailのユーザー名";
$params["password"] = "sendmailのパスワード";
$params["localhost"] = "自ホスト名";
$from = '送信者';
$headers["From"] = mb_encode_mimeheader("送信者名")."<$from>";
$headers["To"] = implode(",", $rcpt);
$headers["Reply-To"] = $from;
$headers["Subject"] = $subject;
$mail = Mail::factory("smtp", $params);
$body = mb_convert_encoding($body, "JIS", "UTF-8");
$ret = $mail->send($rcpt, $headers, $body);
if (PEAR::isError($ret))
{
echo "error: " . $ret->getMessage();
throw new exception_mail($this->m_mysqli->error);
}
}
$rcptは配列 例:send(array($to1, $to2), "件名", "本文");
---------出来た---------
・ログイン
・ログインチェック
・RSS登録
・RSS解除
・ログアウト
・メール送信フラグ設定
・メールアドレス変更/登録
・メール送信時間設定
・オレ専用RSS作成
・メール送信(※sendmailの設定が必要)
---------まだ---------
・アカウント登録
・アカウント削除
メールの送信さえ出来れば後は簡単です。もうちょっとだ。
ところで、メールアドレス変更処理はやっぱり直さないとダメでした。
メールを送信するタイミングは、
・アカウント登録処理。
・メールアドレス変更処理。
・メール送信時間になった時。
↑の3つかな。この処理の時にメール送信処理を行う。
必要なパラメータ
・宛先
・件名
・本文
処理の流れ
1.mb_stringの初期化
2.送信パラメータの初期化
3.MIMEヘッダーの設定
4.MAILオブジェクトの生成
5.本文のエンコード(JIS)
6.送信
7.エラーチェック → エラーがあった場合は、X-StatにERR_MAIL(504)を設定してレスポンス。
public static function send($rcpt, $subject, $body)
{
mb_language("japanese");
mb_internal_encoding("UTF-8");
$params["host"] = "メールサーバのホスト";
$params["port"] = ポート番号;
$params["auth"] = TRUE;
$params["username"] = "sendmailのユーザー名";
$params["password"] = "sendmailのパスワード";
$params["localhost"] = "自ホスト名";
$from = '送信者';
$headers["From"] = mb_encode_mimeheader("送信者名")."<$from>";
$headers["To"] = implode(",", $rcpt);
$headers["Reply-To"] = $from;
$headers["Subject"] = $subject;
$mail = Mail::factory("smtp", $params);
$body = mb_convert_encoding($body, "JIS", "UTF-8");
$ret = $mail->send($rcpt, $headers, $body);
if (PEAR::isError($ret))
{
echo "error: " . $ret->getMessage();
throw new exception_mail($this->m_mysqli->error);
}
}
$rcptは配列 例:send(array($to1, $to2), "件名", "本文");
---------出来た---------
・ログイン
・ログインチェック
・RSS登録
・RSS解除
・ログアウト
・メール送信フラグ設定
・メールアドレス変更/登録
・メール送信時間設定
・オレ専用RSS作成
・メール送信(※sendmailの設定が必要)
---------まだ---------
・アカウント登録
・アカウント削除
メールの送信さえ出来れば後は簡単です。もうちょっとだ。
ところで、メールアドレス変更処理はやっぱり直さないとダメでした。
【設計】ブログを簡単に見るヤツ8
やっとメールサーバの設定出来ました。自宅サーバーでは、複数のドメインを扱ってるので、
メールヘッダに出力される項目についても、注意してます。
今回は、Receivedヘッダのところでつまづいてました。
unknownとか
localhostとか・・・
ちょっと、怪しい内容になってたので。
久々にRFCに目を通しました(汗
しかも和訳されてなくて。
ちなみに、確認したのは主に「RFC4021」です。
ということで、ドメインの取得は目の前です。ドメインなににしようかしら♪
では・・・アカウント登録処理を考えます。
1.アカウント登録画面からメールアドレスとパスワードを入力。
2.メールアドレスがすでに登録されていないか確認。 → 登録されている場合は、登録済のエラー。
3.仮登録テーブルに、「メールアドレス・日時・トークン」を追加。
4.既に仮登録テーブルにメールアドレスが登録されている場合は、上書き。
5.仮登録テーブルから日時が24時間経過しているものを削除。
6.メールアドレス宛てに仮登録メールを送信。本登録用のURLを記載。(token=XXXXXXXXXXXXXXXXXXXXXXXXXX)
7.本登録URLから、ワンタイムトークンを取得。ワンタイムトークンが仮登録テーブルに登録済か確認。
8.登録されていない場合は、無効なアクセスとしてエラー。
9.登録されている場合は、登録完了画面を表示する。(ログイン用のフォーム付き)
こんなカンジかな?たぶん・・・あれ?メールアドレスの変更処理ってどうなってたかな。。。
アドレス変更したら、変更メール送信するべきだよな。
ちょっと見てみよっと。
メールヘッダに出力される項目についても、注意してます。
今回は、Receivedヘッダのところでつまづいてました。
unknownとか
localhostとか・・・
ちょっと、怪しい内容になってたので。
久々にRFCに目を通しました(汗
しかも和訳されてなくて。
ちなみに、確認したのは主に「RFC4021」です。
ということで、ドメインの取得は目の前です。ドメインなににしようかしら♪
では・・・アカウント登録処理を考えます。
1.アカウント登録画面からメールアドレスとパスワードを入力。
2.メールアドレスがすでに登録されていないか確認。 → 登録されている場合は、登録済のエラー。
3.仮登録テーブルに、「メールアドレス・日時・トークン」を追加。
4.既に仮登録テーブルにメールアドレスが登録されている場合は、上書き。
5.仮登録テーブルから日時が24時間経過しているものを削除。
6.メールアドレス宛てに仮登録メールを送信。本登録用のURLを記載。(token=XXXXXXXXXXXXXXXXXXXXXXXXXX)
7.本登録URLから、ワンタイムトークンを取得。ワンタイムトークンが仮登録テーブルに登録済か確認。
8.登録されていない場合は、無効なアクセスとしてエラー。
9.登録されている場合は、登録完了画面を表示する。(ログイン用のフォーム付き)
こんなカンジかな?たぶん・・・あれ?メールアドレスの変更処理ってどうなってたかな。。。
アドレス変更したら、変更メール送信するべきだよな。
ちょっと見てみよっと。
【コーディング】ブログを簡単に見るヤツ9
オレ専用RSS作成処理です。
今回長くなったので(200行程度)、コードはドメイン取ってから公開にします。
ちなみに、全コード公開する予定です。
必要なパラメータ
なし
cronに登録して定時刻になったら動かす。
(登録例) パスは、適当なので夜露死苦。この例だと毎日1時に動きます。
0 1 * * * /usr/share/rss.php
処理の流れ
1.ユーザ一覧をDBから取得。
使用するSQL
select ID, NAME, MYRSS, MAIL, MAILFLAG, MAILTIME from tbl_user
1.DOMDocumentオブジェクトを作成。
2.rssノードを作成。
3.channelノードを作成。
4.必須項目をchannelノードに追加。
5.ユーザーが登録しているRSS一覧を取得。
使用するSQL
select ID, RSSID, RSSURL from tbl_rss where ID = ?
$stmt->bind_param("d", $user['ID']);
6.XML_RSSオブジェクト作成。 new XML_RSS($rss['RSSURL'])
7.一個目の記事itemからノードを作成する。
8.itemノードをchannelノードに追加。
9.5~7を登録数分繰り返す。
10.channelノードをrssノードに追加する。
11.rssノードをDOMDocument追加する。
12.rsses/$NAME.rssが存在するか確認。 → 存在する場合は、削除。
13.RSSをrsses/$NAME.rssにファイル出力。
---------出来た---------
・ログイン
・ログインチェック
・RSS登録
・RSS解除
・ログアウト
・メール送信フラグ設定
・メールアドレス変更/登録
・メール送信時間設定
・オレ専用RSS作成
---------まだ---------
・アカウント登録
・アカウント削除
・メール送信(※sendmailの設定が必要)
後は、メールですな。。。
今回長くなったので(200行程度)、コードはドメイン取ってから公開にします。
ちなみに、全コード公開する予定です。
必要なパラメータ
なし
cronに登録して定時刻になったら動かす。
(登録例) パスは、適当なので夜露死苦。この例だと毎日1時に動きます。
0 1 * * * /usr/share/rss.php
処理の流れ
1.ユーザ一覧をDBから取得。
使用するSQL
select ID, NAME, MYRSS, MAIL, MAILFLAG, MAILTIME from tbl_user
1.DOMDocumentオブジェクトを作成。
2.rssノードを作成。
3.channelノードを作成。
4.必須項目をchannelノードに追加。
5.ユーザーが登録しているRSS一覧を取得。
使用するSQL
select ID, RSSID, RSSURL from tbl_rss where ID = ?
$stmt->bind_param("d", $user['ID']);
6.XML_RSSオブジェクト作成。 new XML_RSS($rss['RSSURL'])
7.一個目の記事itemからノードを作成する。
8.itemノードをchannelノードに追加。
9.5~7を登録数分繰り返す。
10.channelノードをrssノードに追加する。
11.rssノードをDOMDocument追加する。
12.rsses/$NAME.rssが存在するか確認。 → 存在する場合は、削除。
13.RSSをrsses/$NAME.rssにファイル出力。
---------出来た---------
・ログイン
・ログインチェック
・RSS登録
・RSS解除
・ログアウト
・メール送信フラグ設定
・メールアドレス変更/登録
・メール送信時間設定
・オレ専用RSS作成
---------まだ---------
・アカウント登録
・アカウント削除
・メール送信(※sendmailの設定が必要)
後は、メールですな。。。
【設計】ブログを簡単に見るヤツ7
前回の記事で、RSSの出力する方法が解ったので、【オレ専用RSS】の処理の流れを考えます~。
まず、必須なのが、
rss version="2.0"
→channel
→→title $NAME専用RSS
→→link http://XXXXXXXXXXXXXX.com 【ブログを簡単に見るヤツ】トップへのURL
→→description 【ブログを簡単に見るヤツ】って素晴らしいね
→→language ja
→→atom:link http://XXXXXXXXXXXXXX.com/rsses/$NAME.rss
後は、記事毎のitemノード。
itemノードは、登録したRSSの最新だけを追加することにしよう。
そうしないと、登録したRSSの数に比例してでかくなっちゃうので。んー全部追加だとよくないよなぁ・・・
またいい方法あれば考えます。
まず、必須なのが、
rss version="2.0"
→channel
→→title $NAME専用RSS
→→link http://XXXXXXXXXXXXXX.com 【ブログを簡単に見るヤツ】トップへのURL
→→description 【ブログを簡単に見るヤツ】って素晴らしいね
→→language ja
→→atom:link http://XXXXXXXXXXXXXX.com/rsses/$NAME.rss
後は、記事毎のitemノード。
itemノードは、登録したRSSの最新だけを追加することにしよう。
そうしないと、登録したRSSの数に比例してでかくなっちゃうので。んー全部追加だとよくないよなぁ・・・
またいい方法あれば考えます。
XMLを出力する
XMLを出力するコードです。
XMLとDOMの説明は、気が向いた時にでもしてみます。
でも簡単に少しだけ。
XML・・・データを構造化して記述するための言語。
DOM・・・XMLを操作するための機能/処理
//DOMDocumentオブジェクト
$doc = new DOMDocument("1.0", "utf-8");
$doc->formatOutput = true;
//ルートノードの作成
$root = $doc->createElement("rss");
//ルートノードにversion属性を設定
$root->setAttribute("version", "2.0");
//チャンネルノードの作成
$channel = $doc->createElement("channel");
//タイトルノードの作成
$title = $doc->createElement("title");
//チャンネルノードにテキストノードを追加
$title->appendChild($doc->createTextNode("たいとる"));
$channel->appendChild($title);
//リンクノードの作成
$link = $doc->createElement("link");
//リンクノードにテキストノードを追加
$link->appendChild($doc->createTextNode("りんく"));
$channel->appendChild($link);
//デスクリプションノードの作成
$description = $doc->createElement("description");
//デスクリプションノードにテキストノードを追加
$description->appendChild($doc->createTextNode("ですくりぷちょん"));
$channel->appendChild($description);
//ラングエッジノードの作成
$language = $doc->createElement("language");
//ラングエッジノードにテキストノードを追加
$language->appendChild($doc->createTextNode("らんぐえじ"));
$channel->appendChild($language);
//ルートノードにチャンネルノードを追加
$root->appendChild($channel);
//DOMDocumentにルートノードを追加
$doc->appendChild($root);
//作成したXMLをファイルに出力する
$doc->save("test.xml");
出力結果
xml version="1.0" encoding="utf-8"
rss version="2.0"
channel
titleたいとる/title
linkりんく/link
descriptionですくりぷちょん/description
languageらんぐえじ/language
/channel
/rss
アメブロでタグ書けないから、見づらいですよね。
これで、出力出来るので後は、マージする処理だ。
XMLとDOMの説明は、気が向いた時にでもしてみます。
でも簡単に少しだけ。
XML・・・データを構造化して記述するための言語。
DOM・・・XMLを操作するための機能/処理
//DOMDocumentオブジェクト
$doc = new DOMDocument("1.0", "utf-8");
$doc->formatOutput = true;
//ルートノードの作成
$root = $doc->createElement("rss");
//ルートノードにversion属性を設定
$root->setAttribute("version", "2.0");
//チャンネルノードの作成
$channel = $doc->createElement("channel");
//タイトルノードの作成
$title = $doc->createElement("title");
//チャンネルノードにテキストノードを追加
$title->appendChild($doc->createTextNode("たいとる"));
$channel->appendChild($title);
//リンクノードの作成
$link = $doc->createElement("link");
//リンクノードにテキストノードを追加
$link->appendChild($doc->createTextNode("りんく"));
$channel->appendChild($link);
//デスクリプションノードの作成
$description = $doc->createElement("description");
//デスクリプションノードにテキストノードを追加
$description->appendChild($doc->createTextNode("ですくりぷちょん"));
$channel->appendChild($description);
//ラングエッジノードの作成
$language = $doc->createElement("language");
//ラングエッジノードにテキストノードを追加
$language->appendChild($doc->createTextNode("らんぐえじ"));
$channel->appendChild($language);
//ルートノードにチャンネルノードを追加
$root->appendChild($channel);
//DOMDocumentにルートノードを追加
$doc->appendChild($root);
//作成したXMLをファイルに出力する
$doc->save("test.xml");
出力結果
xml version="1.0" encoding="utf-8"
rss version="2.0"
channel
titleたいとる/title
linkりんく/link
descriptionですくりぷちょん/description
languageらんぐえじ/language
/channel
/rss
アメブロでタグ書けないから、見づらいですよね。
これで、出力出来るので後は、マージする処理だ。