「夫を成功」へ導く妻の秘訣 座談会

PHPのNet_SMTPにて、メール送信するプログラムを作成しています。

http://pear.php.net/manual/ja/package.networking …
を参照して作成しているのですが、

存在しないメールアドレスかどうかのチェックは可能でしょうか?

ユーザーが誤ったメールアドレスを設定していた場合、
システムはそのメールアドレスにメール送信するのですが、
当然誤ったメールアドレスなので、ユーザーには届きません。

このような事を回避するために、
システムがメールを送信する際に、
この世に存在するアドレスかどうかチェックする術はあるのでしょうか?

返却されたメールを解析するしか無いのでしょうか…


※.アドレス内に「@」が無いなどのチェックではなく、
  存在するアドレスかどうかのチェックが可能かどうかになります。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>返却されたメールを解析するしか無いのでしょうか…



まず、ドメインの存在自体は、getmxrr()などでチェック可能です。
ただ、「この関数をメールアドレスの確認の目的で使用すべきでは
ありません」と注記されているとおりドメインの有効性はこちらを
利用すべきではないかもしれません。

ドメインはあっているが、メールアドレスが間違っている場合については
最近はスパム対策のため「返却さえしない」ケースの方が多いと思います。
なので何をチェックしても無駄です。
基本的には放置。必要ならユーザー側から問い合わせがくるでしょう。

どうしてもという場合は、やはり空メールを送らせて、最初から有効だと
いう前提の登録システムを構築すべきです
    • good
    • 1

メールアドレスの誤った記述以外は、実際にメールサーバーに問い合わせるしかないですよ



その方法の中で一番簡単で確実なのが確認メールを相手に送ることです
(メールアドレス登録時の問題もありそうな気がしますが、触れないことにしておきます)
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qメールアドレスの存在確認はできるのでしょうか

アンケートフォームを設置しており、アンケートに回答してもらうと「ありがとうございます」というメールを返信しております。
メールアドレスは、回答の必須項目としていて、英数字などの基本的なチェックはしていますが、やはり入力を誤ってエラーとなる方がおられます。

登録後に必ずメールを送りたいとなった場合、メールアドレスが存在するものである必要が出ると思うのですが、メールアドレスの存在チェックはできるものなのでしょうか?

Aベストアンサー

できないはずです。
ドメイン名やMXの存在を確認することはできますが、そのサーバー上にどんなアカウントが存在するかはわかりません。
※わかってしまうと迷惑メールを送りやすくなってしまいます。

どうしても確実なメールアドレスを取得したい場合は、一旦指定されたメールアドレス宛に確認メールを送り、その中にアンケート処理を完了するためのURLを記載するというような手法を利用するのが一般的なようです。

ただ、アンケートでここまで厳密にやることはあまりないかと思います。
お金や景品などが絡めば別ですが。

Q間違ったアドレスに送信しても、エラーメッセージが返って来ないことはあるんですか?

先日、メールアドレス(@以下の企業名)を間違えてメールを送ってしまいました。
たとえば、akasatana@*******.co.jp に送信べきところをakasatana@**.co.jpに送信しました。
ですが、特にエラーメッセージも返って来ず、そのまま送信できてしまいました。

間違えて送った企業名をURLにしてブラウザで見てみたら、なんとその会社のホームページがありました。
この例でいうと、http://www.**.co.jp/が存在したということになります。
ただ、@の前のユーザー名がかなり特殊だったので、その会社の第三者に届いているとも思えません。

逆に、私あてにメールを送ったつもりで、間違えて違うアドレスに送ったという方もいますが、特にMAILER DAEMON等が返って来なかったそうです。
サーバーによって、エラーメッセージが返って来ないことはあるんでしょうか?

送信した時の条件として
○私が転送メールアドレスを二重に使っている
○添付書類をつけた
○CCで送信した
このようなことも関係していますでしょうか?

先日、メールアドレス(@以下の企業名)を間違えてメールを送ってしまいました。
たとえば、akasatana@*******.co.jp に送信べきところをakasatana@**.co.jpに送信しました。
ですが、特にエラーメッセージも返って来ず、そのまま送信できてしまいました。

間違えて送った企業名をURLにしてブラウザで見てみたら、なんとその会社のホームページがありました。
この例でいうと、http://www.**.co.jp/が存在したということになります。
ただ、@の前のユーザー名がかなり特殊だったので、その会社の第三者に...続きを読む

Aベストアンサー

実在しなくてもエラーメールが帰らないサーバーがあります。
恥ずかしながら我社のサーバーです。
ホステイングしているのですが、***@社名で***のアカウントが無いアドレスに送信しても、なんら応答がありません。
先日私宛にメールを送った、いや届いていない、の問題が出まして、最終的に送った人がアドレスを入力間違いし、存在しないアカウントに送っていました。

Qメールアドレスの存在のチェックで簡単なツールがあり

メールアドレスの存在のチェックで簡単なツールがあります。下記のソースで行う事が出来ます。
<form action="http://mobile-tool.net/mail-checker/" method="post">
メールアドレス<BR>
<input type="text" name="mail_name"><BR>
<select name="mail_domein">
<option value="1">@docomo.ne.jp</option>
<option value="2">@ezweb.ne.jp</option>
<option value="3">@softbank.ne.jp</option>
<option value="13">@i.softbank.jp</option>
<option value="14">@disney.ne.jp</option>
<option value="4">@t.vodafone.ne.jp</option>
<option value="5">@c.vodafone.ne.jp</option>
<option value="6">@d.vodafone.ne.jp</option>
<option value="7">@h.vodafone.ne.jp</option>
<option value="8">@r.vodafone.ne.jp</option>
<option value="9">@k.vodafone.ne.jp</option>
<option value="10">@n.vodafone.ne.jp</option>
<option value="11">@s.vodafone.ne.jp</option>
<option value="12">@q.vodafone.ne.jp</option>
</select><BR>
<input type="submit" value="確認">
</form>

キャリアのsmtpサーバにtelnetでつないで、VRFYコマンドでユーザーの存在確認をして、rcpt to:のところでOKが出れば「存在する」、OKがでなければ「存在しない」と判定して居るそうなのですが、これを1000件単位くらいずつまとめてチェック出来る様にしたいのですがこのソースをいじって出来るようにして頂けませんか?

メールアドレスの存在のチェックで簡単なツールがあります。下記のソースで行う事が出来ます。
<form action="http://mobile-tool.net/mail-checker/" method="post">
メールアドレス<BR>
<input type="text" name="mail_name"><BR>
<select name="mail_domein">
<option value="1">@docomo.ne.jp</option>
<option value="2">@ezweb.ne.jp</option>
<option value="3">@softbank.ne.jp</option>
<option value="13">@i.softbank.jp</option>
<option value="14">@disney.ne.jp</option>
<option value="4">@t.vod...続きを読む

Aベストアンサー

普通の用途では必要ない処理だと思います。
なんのためにそんな処理が必要なのですか?
 ユーザーに入力してもらうなら、RFC 5322 - Internet Message Format ( http://tools.ietf.org/html/rfc5322 )を元に、Perlで正規表現でも書いて正しいものか否かを判断しただけでよいです。完璧を求めるなら一旦ユーザーにコードを発行して、そのメールからリンクしてもらって認証すればよいはずです。

QリダイレクトでPOST

教えてください。

リダイレクトの際、POSTで次のページにデータを渡すことは可能でしょうか?

GETだと
header("Location: "a.php?no=".$no);
と、問題なくできるのですが、
できれば、パラメータを隠したいと思います。

以上ですが、よろしくお願いします。

Aベストアンサー

多分できないです。
それに、結局クライアント側に情報を送信しているのだから、POSTにしたところでパラメータを隠した事にはならないですし。
本当に隠すならサーバ側でセッション情報を引き継ぐような形にしないとダメでしょう。

AJAXのかたちにして、ページ遷移を見えなくするというのが手っ取り早いかも。

Q存在しないアドレスに送信した場合

最近アドレスを変えた人に、以前使っていたアドレスに誤って送ったのですが、
普通存在していないアドレスに携帯から送った場合、エラーメールが届くと
思うのですが、数時間前に送ったんですが、エラーメールが届きません。
知人がいうに、私が送信したアドレスはあきらかに使用者はいないそうです。
携帯ではなくPCのドメインなんですが、エラーメールが遅れてくるとしたら、
目安として何時間以内なんでしょうか?
また使用者のいないアドレスに送信してもエラーメールがこない場合は
あるのでしょうか?

Aベストアンサー

こんにちは。
存在しないアドレスにメールを送れば必ず未達通知が帰ってきますよ。これはメールサーバのお約束ですから。
携帯からなのでそのキャリアによって時間差はあるかも知れませんが。(普通なら即座に返ります)
エラーにならない理由としては、そのアドレスがまだ存在するのではないでしょうか。
メールアドレスを変更または削除したとしても、それがメールサーバから本当になくならない限りシステム的には存在します。メールアカウントの変更や削除をメールサーバへ反映するのをどういうタイミングで行うかはISPによってまちまちですが、一般には月1回定期的にやっていると思います。なので、変更とか削除の操作をしたとしてもそのメールアドレスがすぐになくなるわけではないですね。ただし、携帯のメアドは即座に反映されます。このところはネットのメールシステムとはちょっと違います。
もう少し様子を見られてはどうでしょう。

Qなぜ、unexpected T_VARIABLEになるのでしょうか? 

WindowsXP機に、PHP5とPEARを入れています。
あるWebサイトに記述されている下記のサンプルスクリプトをコピペして(PEARは絶対パスに書き換えて)実行しましたが、次のエラーが出ます。全角スペースは入っていませんし、原因が分かりません。
なぜ、unexpected T_VARIABLEになるのでしょうか? どのようにすれば解決できるでしょうか?
エラー
Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in C:\Program Files\Apache Group\Apache2\htdocs\HQuickForm_test\QfrmSmpl.php on line 14

サンプルスクリプト一部抜粋:
<?php
require_once("C:\php\PEAR\HTML\QuickForm.php");
class QfrmSmpl{
var $_form;
function QfrmSmpl($sbmtAct){
$this -> _form = new HTML_QuickForm("frmSmpl","post",$sbmtAct); }
function setForm(){
$this -> _form -> addElement("text","txtName","名前(全角日本字):");
$this -> _form -> addElement("text","txtEname","名前(半角英字):");
$this -> _form -> addElement("text","txtEmail","E-mail:");
$this -> _form -> addElement("text","txtEmail2","E-mail(確認用):");
$this -> _form -> addElement("textarea","txtrComment","コメント:");
}
$this -> _form -> applyFilter(__ALL__,"trim");
$this -> _form -> addRule("txtName","名前を入力!","required", null, "client");
$this -> _form -> addRule("txtEname","半角英字で入力!","alphanumeric", null, "client");
$this -> _form -> addRule(array("txtEmail","txtEmail2"),"メールアドレス不一致!","compare", null, "client");
$this -> _form -> addRule("txtEmail","無効なメールアドレス!","email", null, "client");
$this -> _form -> addRule("txtrComment","コメントを入力!","required", null, "client");
$this -> _form -> setRequiredNote("<font color='red'>*</font>必須入力");
}
以下略

WindowsXP機に、PHP5とPEARを入れています。
あるWebサイトに記述されている下記のサンプルスクリプトをコピペして(PEARは絶対パスに書き換えて)実行しましたが、次のエラーが出ます。全角スペースは入っていませんし、原因が分かりません。
なぜ、unexpected T_VARIABLEになるのでしょうか? どのようにすれば解決できるでしょうか?
エラー
Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in C:\Program Files\Apache Group\Apache2\htdocs\HQuickForm_test\QfrmSmpl.php...続きを読む

Aベストアンサー

検索したら似たようなスクリプトがあったんですが
http://digit-01.com/ownpage/ownpage_quickform.html
これの
//フォーム入力チェックの定義(, null, "client")で、クライアント側でチェック function checForm(){
は function checForm(){ の前で改行が必要なようです

Qforeachで回った数を表示したい

単純な質問ですみません。
====
//getTestlistは別ファイルで定義済み。
<?
$testlist=getTestlist();
foreach($testlist as $test){
?>


<? } ?>
====
例えば↑こんなふうにforeachで$testlistが存在するだけ回したとします。
そのときに何回まわったか?($testが何件あったか?)だけを表示したいのですが、そんなことってできますか?
表示したい位置は<? } ?>の外側にと考えています。
あさってな質問でしたらすみません。
phpVer 4.3

よろしくお願いいたします。

Aベストアンサー

<?
$testlist=getTestlist();
$n=0;
foreach($testlist as $test){
$n++;
?>
<?}?>

<?=$n?>回
とかでよいかと思います。

途中でbreakなどが無ければ
<? echo count($testlist) ?>でも良いかも知れません。

QHTMLフォームのSELECTの幅を一定にするためには?

HTMLフォームのSELECTの幅を一定にするためにはどのようにすれば
いいのでしょうか?

CSS等で設定できるとありがたいのですが、やり方がわかりません。

Aベストアンサー

<select style="width: 200px">

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む

Qエクセル関数で日付かどうかの確認?

ワークシート関数でセル内が日付かどうか調べるものはないでしょうか?
VBAのIsDateなら存じておりますが。

Aベストアンサー

日付を表すデータは、セルの値としては、単なる数値なのですが、どういう種類のセルの書式が設定されているかを調べることはできます。
調べたいセルがA1だとして
=cell("format",A1)

"D1"になれば概ね日付だと判別できます。
時刻を含めたものにする場合は、
Dで始まることをチェックすればいいかも。
詳しくは、CELL関数のヘルプを参照してください。


人気Q&Aランキング