こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

写真を添付したメールで回答

写真で回答するアンケートを作ったのですが、
回答と写真のファイル名が送れるだけで画像が送れません。
希望としては、回答部分がメール本文、選択した写真がメールの添付書類になるようにしたいです。

ファイルの中身を出力する場合は 
 enctype="text/plain"
では、駄目で
 enctype="multipart/form-data"
にするとよさそうな記事を見つけて、そのように設定して見ました。
すると、今度は、メール本文も添付書類も何もない、空のメールになってしまいました。

写真を添付したメールで回答するアンケートを作りたいのですが、どのように書いたらよいのかわかりませんので、教えてください。

よろしくお願いします。


<form name="a" method="post" action="mailto:xxxx "
 enctype="text/plain">   <-------- この部分を交換

氏名 : <input type="text" name="ans1">
困ったときの写真:
<input type=file name="ansfig" onChange="this.form.disp.src=window.URL.createObjectURL(this.files[0])">
<br><img name=disp>

<input type="submit" value=" 送信1 ">
<input type="reset" value=" 取消 ">
</form>

投稿日時 - 2014-07-17 21:15:49

QNo.8682262

すぐに回答ほしいです

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

【引用】____________ここから
action = uri [CT]
 この属性は、フォーム処理エージェントを指定する。HTTPスキームURI以外の値の場合のユーザエージェントの動作は、定義しない。
method = get|post [CI]
 この属性は、フォームデータ集合を提出する際にどちらのHTTPメソッドを用いるかを指定する。 可能な値は、大文字小文字を区別せず、「get」(デフォルト値)と「post」である。使用法については フォームの提出の項を参照のこと。
enctype = content-type [CI]
 この属性は、(method属性値がpostの場合)サーバに提出する際のMIMEタイプを指定する。 デフォルト値は "application/x-www-form-urlencoded"である。 INPUT要素でtype="file"のものと組合せる場合は、この値に "multipart/form-data"を指定する必要がある。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ここまで[Forms in HTML documents (ja)( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html401j/interact/forms.html#h-17.3 )]より
 仕様書くらいは、一度通して読んでおきましょう。

 よって、かならず
<form action="/cgi/mailForm.cgi" method="post" enctype="multipart/form-data">
 になります。
 ・デフォルトのGET(Querystring)の許容量をオーバーします。

 CGI側で、画像の処理をします。Perlが使えれば、多くの場合ImageMagickないしPerlMagickが使えますので、メールで扱える範囲内にデータを縮小するなりして送信すれば良いです。
 https://www.google.co.jp/?gws_rd=ssl#q=%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%83%A1%E3%83%BC%E3%83%AB+%E7%94%BB%E5%83%8F%E6%B7%BB%E4%BB%98+magick+OR+gd&safe=off

投稿日時 - 2014-07-18 08:42:05

お礼

回答ありがとうございます。
enctype="multipart/form-data" の場合、
 action="mailto:xxxx" では何も送信されない。
 action="cgitest.cgi"であれば、希望したデータが送られる。
こと以下の方法で確認できました。

cgiファイルの作り方で時間がかかりお礼が遅くなりましたが、exeファイルの拡張子をcgiに修正するだけでOKなのですね。

具体的には、
action="cgitest.cgi" enctype="multipart/form-data"

とし、以下のCプログラムの実行ファイル test.exe を
cgitest.cgi に改名してHTMLファイルと同じフォルダに置いて、
送信ボタンを押したところ、
回答部分のテキストデータと、選択した写真のバイナリデータが受信できました。

---------------------
#include <stdio.h>
#include <fcntl.h>
#include <io.h>

int main(void)
{
int c;
FILE *fp;
fp = fopen("temp.dat","wb");
setmode(fileno(stdin), O_BINARY);
while((c=fgetc(stdin)) != EOF ) {
fputc(c,fp);
}
fclose(fp);

return 0;
}

投稿日時 - 2014-08-02 22:50:04

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

HTMLではきびしいと思いますよ
ユーザーが手で添付するか、サーバーサイドのプログラムで処理するかの
どちらかになると思います

投稿日時 - 2014-07-17 22:01:38

お礼

回答ありがとうございます。
ユーザインタフェースは変えたくありませんので、サーバーサイドのプログラムで処理する方法を教えてほしいです。

<form name="a" method="post" action="yyyyy.cgi "
 enctype="text/plain">

とすれば、action="mailto:xxxx " では送られなかった、
回答内容と、写真データがサーバーに送られ、
サーバーサイドに yyyyy.cgi を作れば可能
ということでしょうか?

投稿日時 - 2014-07-18 06:24:04

あなたにオススメの質問