Linux上Cプログラムでメール送信を行いたいと思って
います。
Cからシステムコールでsendmailを実行する方法は
わかったのですが、純粋にSMTPサーバーにC言語から
アクセスして送信する方法など可能なのでしょうか?

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

A 回答 (1件)

可能ですよ。

実際に sendmail のプログラムもそうやって作られている
のだし。

socket で通信するプログラムが組めて、SMTP のプロトコルを理解していれば
誰でも作れます。SMTP のプロトコルは RFC(1123だったかな?)を読めば
わかります。

SMTP サーバに対して、ポート23で connect して、HELO して、MAIL して
RCPT して、DATA して、QUIT する、って感じ。


そんなに難しいプログラムには(エラー処理なんかをはしょれば)ならない
ですが、少なくとも popen で sendmail を使うよりは、ずうっと面倒です。
    • good
    • 0
この回答へのお礼

なるほどー。
telnetでsmtpサーバに接続した時に入力するコマンド
手順をソケットプログラムで送信していけばいいと
いうことですね。

やってみます。有難うございました。

お礼日時:2001/08/10 17:20

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

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

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

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

QC# SmtpでYahooサーバーから送信

お世話になります。

VCS2010Expressで、簡単なメールソフトを作成しようとしているのですが、
SmtpExceptionが発生してしまい、送ることができません。

Yahoo側の設定も、正しく行ったと思うのですが、原因の解る方、
ご助力をお願いいたします。

=================================================================
private void button1_Click(object sender, EventArgs e)
{
SmtpClient sm = new SmtpClient("smtp.mail.yahoo.co.jp", 25);
sm.Credentials = new System.Net.NetworkCredential("ログイン名","パスワード");
sm.Send("自分@yahoo.co.jp","宛先@yahoo.co.jp", "b", "c");


MessageBox.Show("きちんと送れたようです。");
}
=======================================================================
Yahoo側でも、Yahooでリバーとやらの設定も有効にし、
下記のサイトで書かれている内容も確認しました。
http://www.yahoo-help.jp/app/answers/detail/p/565/a_id/47648
http://www.yahoo-help.jp/app/answers/detail/p/536/a_id/43934/faq/pc-home

しかし、その結果SmtpException、メールを送信できませんでした。(添付図)
と出てしまいます。

原因と対策を、何卒よろしくお願いいたします。

お世話になります。

VCS2010Expressで、簡単なメールソフトを作成しようとしているのですが、
SmtpExceptionが発生してしまい、送ることができません。

Yahoo側の設定も、正しく行ったと思うのですが、原因の解る方、
ご助力をお願いいたします。

=================================================================
private void button1_Click(object sender, EventArgs e)
{
SmtpClient sm = new SmtpClient("smtp.mail.yahoo.co.jp", 25);
sm.Credentials = new ...続きを読む

Aベストアンサー

SmtpClient sm = new SmtpClient("smtp.mail.yahoo.co.jp", 25);

YahooのSmtpポートは25番は使えません。587番を使ってみてください。

QBorland C++ Builderで簡単なC言語プログラムの作成・実行

Borland C++ Builderで簡単なCのプログラムを作り実行させるにはどうしたらよいですか?
DOS窓上でコンパイルするのではなく、Borland C++ Builderのメニューから行いたいのです。
一応、「ファイル→新規作成→その他→Cファイル」でCのファイルは作成できるのですが、このファイルを「プロジェクト→ユニットのコンパイル」でコンパイルすることができません。
Formオブジェクト(?)を作成しておくとコンパイルできます。
Formは特に必要ないので、FormなしでCのファイルだけをコンパイルしたいのです。

DOS窓でのコンパイル・実行はできます。

事情があってBorland C++ Builderを使わなくてはなりませんので、他のIDEはこの際全く解決になりません。

よろしくお願いします。

Aベストアンサー

プロジェクトを[コンソールアプリケーション]で作成して置く必要があります。

TurboC++での例。
画面は多少違いますがC++Builderでも同じです。
http://www.asahi-net.or.jp/~qb3k-kwsk/rpg/program/tool/tcpp/tcpp.html

QC言語からC++の関数をコールする方法について

初めて質問させて頂きます。
質問は2つあります。

●1つ目の質問です。
この度、C言語ベースのプログラムに、C++で作成した関数を使用することになりました。
方法としてextern等を駆使しつつ、ラッパー関数を使って対応しております。
そこで質問なのですが、この場合、ラッパー関数に使用するファイル形式はcppまたはcのどちらが正しいのでしょうか?(どちらでも動きました)


●2つ目の質問です。
Windows環境(vs2005)では無事、CからC++の関数を呼ぶことに成功はしました。

しかし、本当に動かしたいのはLinuxでの環境になります。
先程作成したラッパー関数のファイルとC++で作成した関数のファイルをライブラリ(soファイル)化したものを使用し、コンパイルとリンクは問題なく通すことに成功したのですが、
実行させてみると、Cの関数からラッパー関数をコールしているのは確実なのですが、ラッパー関数の処理を通らず、プログラムが止まってしまいます。
試しにラッパー関数の処理を「return 0;」だけにして実行させてみましたが現象は変わらずでした。
そのため、ラッパー関数を呼ぶための何かに問題があると思っています。

ここで質問なのですが、ビルドのときにライブラリをリンクさせるだけでは駄目なのでしょうか。また、他に思い当たることがありましたらご教示頂きたいです。
Windows環境(vs2005)では期待する動作をしているためプログラムは問題ないと思っています。

初めて質問させて頂きます。
質問は2つあります。

●1つ目の質問です。
この度、C言語ベースのプログラムに、C++で作成した関数を使用することになりました。
方法としてextern等を駆使しつつ、ラッパー関数を使って対応しております。
そこで質問なのですが、この場合、ラッパー関数に使用するファイル形式はcppまたはcのどちらが正しいのでしょうか?(どちらでも動きました)


●2つ目の質問です。
Windows環境(vs2005)では無事、CからC++の関数を呼ぶことに成功はしました。

しかし、本当に動かしたいの...続きを読む

Aベストアンサー

「ラッパー関数」は共有ライブラリ (DLL) 内に配置していると解釈して思い当たる事を。

> ●1つ目の質問です。

DLL を C からも使いたい場合に、DLL から公開 (export) する関数を、C++ で書くべきか C で書くべきかという事でしたら、どちらでも構いません。(もちろん、C++ で公開する関数を書く時は extern "C" を付ける必要はありますが、それだけです。)

> ●2つ目の質問です。
> ここで質問なのですが、ビルドのときにライブラリをリンクさせるだけでは駄目なのでしょうか。また、他に思い当たることがありましたらご教示頂きたいです。

DLL (.so) はどこに配置しているのでしょうか。Windows と Linux では DLL の検索パスが異なります。
Windows → http://msdn.microsoft.com/ja-jp/library/7d83bc18(v=vs.90).aspx (MSDN)
Linux → http://en.wikipedia.org/wiki/Rpath (英語Wikipedia)

Windows は実行ファイルと同じディレクトリに DLL があるかどうか確認しますが、Linux では (恐らくセキュリティを考慮に入れて) 既定では、実行ファイルと同じディレクトリにある DLL を確認しません。

処理系 (OS, コンパイラ) に依存するかも知れませんが例えば:

(a) リンク時 (~コンパイル時) に RPATH に実行ファイルと同じディレクトリを追加する (オプション -Wl,-R,'$ORIGIN') か
$ gcc -o 実行ファイル fuga -L何とか -lかんとか -Wl,-R,'$ORIGINI'
($ORIGIN は「実行ファイルと同じディレクトリ」という意味の特別な指定だそうです。参考 URL 参照下さい)

(b) または、実行時に LD_LIBRARY_PATH 環境変数に DLL の配置場所を指定するか
$ export LD_LIBRARY_PATH='DLL のあるディレクトリ'
$ ./実行ファイル ...

すれば良いです。

# しかし、DLL が見付からなければプログラムの起動時点で失敗するはずなのですが、
# > 実行させてみると、Cの関数からラッパー関数をコールしているのは確実
# は不思議ですね…もしかして DLL を遅延ロード (dynamic loading) とかしていますか?

参考URL:http://itee.uq.edu.au/~daniel/using_origin/

「ラッパー関数」は共有ライブラリ (DLL) 内に配置していると解釈して思い当たる事を。

> ●1つ目の質問です。

DLL を C からも使いたい場合に、DLL から公開 (export) する関数を、C++ で書くべきか C で書くべきかという事でしたら、どちらでも構いません。(もちろん、C++ で公開する関数を書く時は extern "C" を付ける必要はありますが、それだけです。)

> ●2つ目の質問です。
> ここで質問なのですが、ビルドのときにライブラリをリンクさせるだけでは駄目なのでしょうか。また、他に思い当たることがあ...続きを読む

QC言語のプログラムが実行できません。

C言語のプログラムが実行できません。

コンパイルは出来るんですが、実行すると、「Segmentation fault」と表示されてしまいます。

これは何のエラーなんでしょうか?
基本的な事かもしれませんが、分かる方宜しくお願い致します。

Aベストアンサー

僕も何度も出したなぁ。

ひとくちにSegmentation faultといっても、それこそさまざまな要因があるので、
これだけで原因を突き止めるのは非常に難しいです。

コンパイルはあくまで文法としてみているだけであり、
処理の流れ、メモリ確保など、プログラムそのものを見ているわけではありません。
このエラーが出るのは文法などよりもっと上位の原因なのです。
たとえばですが。
長さ10の配列があったとして、11番目以降を参照したりすると、
そういうのが出たような気がします。

ですから、変数があれば、その内容をprintf文で逐一出していき、
変な値が入っていないとか、少しずつ直していくしかないと思います。

QC言語C++言語アセンブラ言語の就職先

自分は以前Javaプログラマをやってました。

あまりに、便利なライブラリばかりで、「なんかプログラムを書いているというより、ソフトウェアの振る舞いを書いているだけだ。。」とおもってしまい、すきになれませんでした。正直、苦痛でした。

今、上記言語を勉強しているのですが、コンピュータの根本からプログラムをしている実感が沸き、とても面白いです。

でも、これらの言語を習得したところでどんなところに就職できるのかさっぱりわかりませんし、需要があるのかもしりません。いわゆる組み込み系統は就職できるんでしょうが、私としてはアルゴリズムでUNIXのプログラムをシコシコ書いているような作業がすきなのです。いってみれば、私はクラシックな人間だとおもいます。

そんな僕ですが、就職先はあるのでしょうか?よろしくお願いします。

Aベストアンサー

 勉強熱心ですね。
 実際に、kamkamkam3-san の言われている、
「なんかプログラムを書いているというより、ソフトウェアの振る舞いを書いているだけだ。。」というのは的を得ています。
 
 経験からなんですが、ソフトウェア会社では、ノウハウとしてライブラリをもっています。ちょうど、Java のクラス・ライブラリーなようなものです。ですから、それらを使って製品を効率良く製品をつくれるかが重要です。実際のソフトウェア・エンジニアは、それをうまく使って効率良くコーディングすることを要求されます。

 ソフトウェア業界は、1人で閉じた製品を開発することは、まずないです。製品=プロジェクトだとすると、最低3名~100人以上が同時進行となります。そうなると、割り当てられたノルマを効率良く行うかが評価のポイントになります。つまり、「ソフトウェアの振る舞いを書いているだけ」ということにもなります。

 コンピュータ言語は、あくまでもツール(道具)です。
 kamkamkam3-san が、今後どういった分野の仕事を希望している(興味がある)かが重要だと思います。
 その答えとして、「C言語C++言語アセンブラ言語」を勉強することで実感できると思います。ですので、ぜひ、勉強を続けてください。

 勉強熱心ですね。
 実際に、kamkamkam3-san の言われている、
「なんかプログラムを書いているというより、ソフトウェアの振る舞いを書いているだけだ。。」というのは的を得ています。
 
 経験からなんですが、ソフトウェア会社では、ノウハウとしてライブラリをもっています。ちょうど、Java のクラス・ライブラリーなようなものです。ですから、それらを使って製品を効率良く製品をつくれるかが重要です。実際のソフトウェア・エンジニアは、それをうまく使って効率良くコーディングすることを要求さ...続きを読む


人気Q&Aランキング

おすすめ情報