• ベストアンサー

smtp-auth でメール送信

補足します。  認証終了後、 MAIL FROM を送ります。 sprintf (out_data, "MAIL FROM:<%s>\r\n", buf); if ( 0!=put_smtp_auth_line( SMTPSock, out_data, strlen (out_data) ) ) return(-1); buf には、自分のメールアドレスが入っています。 この結果は、 500 5.5.1 Command unrecognized: "" が帰ってきます。

質問者が選んだベストアンサー

  • ベストアンサー
  • maesen
  • ベストアンサー率81% (646/790)
回答No.1

補足が新規の質問になっているようですがこちらに回答します。 >500 5.5.1 Command unrecognized: "" 記載されたプログラム上では明確な問題は見つけられませんでしたが、 このエラーは文法エラーなので送られているコマンド列が正しくないのだと思います。 SMTPクライアントの開発をしているようですので、送信したはずとか受信データがおかしいなどを避けるためにも、 本当に送受信しているパケットをWireSharkなどでキャプチャしつつデバッグしたほうが良いように思います。

uyama33
質問者

お礼

ありがとうございます。 rfc4954 では、 MAIL FROM:<e=mc2@example.com> AUTH=e+3Dmc2@example.com との記述があります。 AUTH の扱いが間違っているようなので。 rfc4954 をゆっくり見直してみます。 送信、受信のデータはデバッガの中でみています。(VS 2005)を使っています。 ありがとうございました。

uyama33
質問者

補足

500 を無視して、先に進んでみたらメールを送信できました。 これで、落ち着いて検討できます。 ありがとうございました。

関連するQ&A

  • SMTP-AUTH 334

    いつも、ご指導いただき、感謝しております。 VS2005、Windows7、WindowsSocketを使ってメールソフトを作っています。 SMTP-AUTH での、サーバーとのやり取りで、 AUTH PLAIN AH********A== 334 235 2.0.0 OK ****** のように、235の前に、334の応答があります。 送信しているデータでbase64変換したものはサンダーバードの送信しているデータと同じです。 Wireshark で見ています。 どんな理由で、334が帰ってくるのでしょうか? 教えていただければ幸いです。よろしくお願いします。 ソースコードは以下のようです。 デバッグの最中ですので、見苦しい点は勘弁してください。 sprintf( out_data, "EHLO %s\r\n", (wanted_hostname==NULL) ? my_hostname : wanted_hostname); if ( 0!=put_smtp_auth_line( SMTPSock, out_data, strlen (out_data) ) ) return(-1); if ( get_smtp_auth_line() != 250 ) {//250-smtp... smtp_error ("ESMTP server error 250"); return(-1); } char b64in[256]; char b64out[512];int np; np=0; b64in[np] = NULL; np = np+1; strcpy((char *)(b64in+np),oc_sender); np = np + strlen(oc_sender); b64in[np] = NULL; np = np+1; strcpy((char *)(b64in+np), oc_pop3password); np = np+strlen(oc_pop3password); b64in[np]=NULL; //base64_encode(char *in, char *endin, char *out) base64_encode(b64in, (b64in+np), (char *)b64out); sprintf( out_data, "AUTH PLAIN %s\r\n",b64out); if ( 0!=put_smtp_auth_line( SMTPSock, out_data, strlen (out_data) ) ) return(-1); if ( get_smtp_auth_line() != 334 ) {//challenge value smtp_error ("ESMTP server error"); return(-1); } if ( get_smtp_auth_line() != 235 ) {//OK Auth smtp_error ("ESMTP server error"); return(-1); }

  • ソケット通信で大容量のメールの場合送信されません

    質問です smtpクライアントからtcpでメール送信するプログラムを組んだのですが、 添付ファイルのサイズが大きいもの(500000行を超えるような)を1行ずつsendメソッドで送信すると送信先で受信できません。 400000行まではいくのですが… sendではエラーは返っておらずパケットは送られてる様です。 パケットダンプをとってみたのですが、メールサーバから応答は返ってきていました。 filein.open("test.eml"); if (filein.fail()){ return -1; } if((soc = ConnectHost("testhost","smtp",25)) == -1){ return -1; } send_buf = new char[BUFSIZ]; sprintf(send_buf,"MAIL FROM:<%s>\r\n","test@test.test"); SocketSend(soc,send_buf,strlen(send_buf)); sprintf(send_buf,"RCPT TO:<%s>\r\n","test2@test.test"); SocketSend(soc,send_buf,strlen(send_buf)); sprintf(send_buf,"DATA\r\n"); SocketSend(soc,send_buf,strlen(send_buf)); ss = new char[1024]; while (filein.getline(ss,1024)){ sprintf(send_buf,"%s\r\n",ss); SocketSend(soc,send_buf,strlen(send_buf)); ←ここでループ } delete ss; sprintf(send_buf,"\r\n.\r\n"); SocketSend(soc,send_buf,strlen(send_buf)); SocketRead(soc,send_buf); delete send_buf; filein.close(); if(SocketClose(soc) == -1){ return err; } int SocketSend(int soc,char* buff,int nbytes) { register int nleft,nwritten; char* p = buff; nleft = nbytes; while(nleft > 0) { nwritten = send(soc,p,nleft,0); if(nwritten <= 0){ return nwritten; } nleft -= nwritten; p += nwritten; } return 0; } int SocketClose(int soc) { int ret; if(close(soc) == -1){ return -1; } return 0; } int SocketRead(int soc,char* buff) { int rbyte; rbyte = read(soc,buff,strlen(buff)); return 0; } 上記で問題になっていそうなところがあれば 教えてください。。 よろしくお願いします。

  • smtp送信時の認証をperlで書きたい

    smtpで認証が必要なメールサービスがあり、これをperlで記述しています。 「pop befor smtp」では、駄目でした。 そのた、authでの認証(良く分からず)行って見ましたが、システムでは無視されました。何方かご指導よろしくお願いします。 現状のソースを添付します。 $smtp = Net::SMTP->new("smtp$server"); $smtp->mail($from); $smtp->to($to); $smtp->data(); $smtp->datasend("Date:2009/01/10 18:30\n"); $smtp->datasend("From:$from\n"); $smtp->datasend("To:$to\n"); $smtp->datasend("Subject:$Subject\n"); $smtp->datasend("Content-Transfer-Encoding: 7bit\n"); $smtp->datasend("Content-Type: text/plain;charset=\"iso-2022-jp\"\n\n"); $smtp->datasend("\n"); $smtp->datasend("これは、テストです。\n"); $smtp->dataend(); $smtp->quit;

    • ベストアンサー
    • Perl
  • SMTP AUTHにおける認証方法について

    SPAM対策として「POP before SMTP」での手段以外に 「SMTP AUTH」での手段もあるようなのですが、 どのような仕組みで認証できるのでしょうか? 調べた限りでは、SMTPを拡張し認証の機能を持たせる規定との事。 (RFC2554において規定されているらしい)  ↑ 確か、RFCって英語で書かれていたような・・・ send mail の最新のVersionでは対応されている?が、 ユーザーが利用するMUAのSMTP AUTH対応が進んでいない? #違っていたらご指摘ください。 宜しくお願いします。

  • PerlでSMTP-AUTH認証をする

    現在、さくらのレンタルサーバにてperlスクリプトを稼動しています。 今回、さくらのレンタルサーバのメール認証がPOP before SMTPからSMTP認証(SMTP-AUTH)に変更になりましたので、perlスクリプト内で自動メール送信させるのにNet::SMTP::TLSモジュールを利用することにしました。そこで (1)SMTPサーバー名、ポート番号、ユーザー名、パスワードを設定する (2)宛先などの必要な設定をする (3)メール内容を設定する (4)メールヘッダを設定する (5)メールを送信する という流れで現在perlスクリプトを以下のように記述しました。 #!/usr/bin/perl use CGI::Carp qw(fatalsToBrowser); use Net::SMTP::TLS; use Authen::SASL; my $smtp = Net::SMTP::TLS->new($mailhost, Port => $mailport, User => $mail_username, Password => $mail_password ); $smtp->mail($from_mail); $smtp->to($tomail); $smtp->data(); $smtp->datasend($header); $smtp->datasend($message); $smtp->dataend(); $smtp->quit; 変数の値は割愛していますが、 上記のスクリプトは、POP before SMTPの時は問題なくメール送信できたのですが、サーバのメール認証がSMTP認証(SMTP-AUTH)に変更になってからは以下のようなエラーが出ます。 invalid SSL_version specified at /usr/local/perl/5.8/lib/perl5/site_perl/5.8/IO/Socket/SSL.pm line 418 何か間違いであるとか、他に必要な設定がありますでしょうか? 宜しくご教授お願いいたします。

    • ベストアンサー
    • Perl
  • Becky! でのSMTP-AUTH設定の仕方(送信ができない)

    以前、Yahooにてインターネット接続をして、YahooメールをBecky!で取り込んで使用していました。 転居に伴い、Yahooの回線がとれず、ケーブルテレビの回線を使用することになりました。 メールの環境をそのまま使いたいため、設定しましたが、送信ができません。 まず、ケーブルテレビに問い合わせたところ、 ・サーバーのポート番号 「SMTP」を25→587に変更 ・SMTP認証にチェックをつける 以上のみ指示がありましたので、変更しましたが、送信不可です。 今度は、Yahooに問い合わせましたが、HPによるSMTP-AUTHの設定方法を案内されたのみ(Outlookの設定方法のみ載っている)で、どうしていいかわかりません。 Becky!の使い方を調べたのですが、SMTP認証の方法は各プロバイダなどに問い合わせて下さい、とのこと。 以上の回答を得て、どうしようもなくなっています。 SMTP-AUTHの設定方法など、どうしたら送信ができるようになるのか、どなたか教えてください。 よろしくお願いします。

  • yahooのフリーメールでPHPでSMTP-AUTH認証の仕方がわかりません。

    PHPを始めたばかりの初心者です。yahooのフリーメールでPHPでSMTP-AUTH認証の仕方がわかりません。どなたか経験された方、具体的なソースを教えて頂きたいのですが・・。 php.iniのportを587にしてもSMTP-AUTH認証ではじかれてるみたいなんです。ぐぐったのですが、あまり具体的な内容が書かれてなかったもので・・。 SMTP server response: 530 Sorry, please use SMTP-AUTH instead - for help go to http://help.yahoo.co.jp/help/jp/mail/whatisymail/whatisymail-51.html というエラーが出るのでそのページで調べても素人なもので、よくわからなくて・・。 すいません、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • perlでSMPT認証してメールを送信したい。

    こんばんわ。 Perlで一点伺いたいことがございます。 SMTP認証して、メールを送信したいのですが ネット上でサンプルをさがしてきて実際に試したのですが うまくいきません。 どうしたらいでしょうか?以下が実施に動かしているコードです。 #!/perl/perl/bin/perl use strict; use warnings; use CGI::Carp qw(fatalsToBrowser); print"content-type: text/html\r\n\r\n"; print "Hello World!\n"; use Net::SMTP; #SMTPサーバの指定 my $mailhost = 'smtp.gmail.com'; my $mailport = 587; my $mail_username = 'XXX@gmail.com'; my $mail_password = 'パスワード'; my $to_mail = '宛先'; my $from_mail = '送信先'; my $smtp = Net::SMTP->new($mailhost,Port => $mailport); $smtp->auth($mail_username, $mail_password); #メールの送信先 $smtp->mail($from_mail); $smtp->to($to_mail); #メールの内容 $smtp->data(); $smtp->datasend("From: $from_mail\n"); $smtp->datasend("To: $to_mail\n"); $smtp->datasend("Subject: test\n"); $smtp->datasend("\n"); $smtp->datasend("test\n"); #メール内容終わり $smtp->dataend(); #接続を切る。 $smtp->quit; print $smtp; ほぼコピーアンドペーストなのですが、うまくいきません。 とりあえず、newしたオブジェクト $smtpを出力してみると アドレス的なものが表示されます。 Net::SMTP=GLOB(0x7d15ec) ただ、これは認証情報が適当でも出力されるようです。 何度やってもメールは届いていないようなので認証の時点でまちがっているのでしょうか? ただ、認証情報は実際にメールソフトで使っているものなので、間違いないと思うのですが、識者の方よろしくご教授お願いします。

    • ベストアンサー
    • Perl
  • NET::SMTPについて

    おねがいします。 NT環境からperlでメール送信したいと思っています。 NET::SMTPをPPMでダウンロードしました。 以下のサンプルプログラムを得て、SMTPサーバ名など を入れました。でも、エラーにはなりませんが送信されず。 そもそも、IDとpassの認証部分がないですよね。 このサンプルだと「SMTPサーバ名さえわかれば誰でも そのSMTPサーバからメールできちゃう」ってことに なりませんか?? 他の方の質問にあった、 $smtp->auth( USERNAME, PASSWORD ); も試しましたが、エラーになりました。 認証うける方法があるのでしょうか? よろしくおねがいします。 #!/usr/local/bin/perl -w use Net::SMTP; $smtp = Net::SMTP->new('mailhost'); $smtp->mail($ENV{USER}); $smtp->to('postmaster'); $smtp->data(); $smtp->datasend("To: postmaster\n"); $smtp->datasend("\n"); $smtp->datasend("A simple test message\n"); $smtp->dataend(); $smtp->quit;

  • BASP21メール送信(SMTP-AUTH認証)ASP

    ご存知の方、宜しくお願いします。 あるプロバイダのメールサーバへBASP21を使用してメールの送信を 行いたいのですが、以下のエラーMSGが表示されて できません。 「エラー530 Sorry,Please use SMTP-AUTH instead」 outlook Expressだと問題なく送信できます。 outlook Expressの設定は ・送信メールサーバ このサーバは認証が必要・・・にチェック  受信メールサーバと同じ設定を使用する SMTPポートは「587」 BASPでは、 MailServer="xxxx.co.jp:587 mailfrom="user1:pass1" と設定しています。 詳しい方、宜しくお願いします。

専門家に質問してみよう