質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

Mailman

Mailmanは、オープンソースのメーリングリスト管理ソフトウェア。Webの管理者用画面でメーリングリストの作成・削除ができ、メーリングリストの設定変更も可能です。また、メーリングリストの各Webページを個別にカスタマイズできるなど、多くの機能を備えます。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1675閲覧

python cgiでtext areaの文章が途中で切られたメールになってしまう。

katsumich

総合スコア32

CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

Mailman

Mailmanは、オープンソースのメーリングリスト管理ソフトウェア。Webの管理者用画面でメーリングリストの作成・削除ができ、メーリングリストの設定変更も可能です。また、メーリングリストの各Webページを個別にカスタマイズできるなど、多くの機能を備えます。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/05/26 07:36

pythonでcgiとして単純なメールフォームを作っているのですが、下記のソース(html)と(py)

<form name="form" method = "post" action = "contact.py"> 相談内容 :<br><textarea name="cont" rows="4" cols="40">    ここに相談内容を記入してください。ここに相談内容を記入してください。    ここに相談内容を記入してください。ここに相談内容を記入してください。        </textarea><br> <input type="submit" value="送信"><br> </form>

このテキストエリアに入力していただき送信してcontact.pyにpostします。
contact.py

#!/usr/bin/python3.4 # -*- coding: utf-8 -*- from email import message import smtplib import ssl import cgi import sys import io smtp_mode = 'normal' smtp_host = '〇×△.xserver.jp' smtp_account_id = 'info@〇×△〇×△.com' smtp_account_pass = '〇×△〇×△' from_mail = 'info@〇×△〇×△.com' to_mail = '〇×△〇×△@gmail.com' sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') form = cgi.FieldStorage() cont = form.getvalue('cont') msg = message.EmailMessage() msg.set_content(cont); msg['Subject'] = 'メールフォーム' msg['From'] = from_mail msg['To'] = to_mail if smtp_mode == 'starttls': server = smtplib.SMTP(smtp_host, 587, timeout=10) server.ehlo() server.starttls() server.ehlo() elif smtp_mode == 'ssl': context = ssl.create_default_context() server = smtplib.SMTP_SSL(smtp_host, 465, timeout=10, context=context) else: server = smtplib.SMTP(smtp_host, 25, timeout=10) server.login(smtp_account_id, smtp_account_pass) server.send_message(msg) server.quit() print('Content-Type: text/html; charset=utf-8') print() print('<h1>メール送信完了</h1>') print("<pre>") print(cont) print("</pre>") コード

これでサーバー上にアップロードしcontact.pyのパーミッションを755にします。
実際行ってみると送信されてきたメールの文章が途中で切られてこんな感じになってしまいます。

   ここに相談内容を記入してください。ここã

イメージ説明

2週間くらいあれやこれややったり調べたりしたのですがわからずじまいです。
大変申し訳ございませんがご教授願えれば幸いです。
またpython cgiのデバッグのいい方法があったら教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

おはようございます。

問題文読ませていただきました。

まず、formのPOSTに関して問題ないことは確かめていますか?多分大丈夫だと思いますが再度ご確認のほど、お願いいたします。(contact.pyにてprint(cont)の値へ、正しくtextareaで入力したデータが格納されているのか?)

次にこちらの記事のサンプルを試してみて、問題解決しそうかご確認いただけますか?????‍♂️
Pythonでメール送信Gmail編
Pythonでメールを送信

よろしくお願いいたします。????‍♂️

<追記>
以下のコードを利用できる新しいpythonファイルを作成して、必要箇所を変更し、メール送信ができることをご確認いただけますか?????‍♂️

Python

1# https://qiita.com/kawa-Kotaro/items/460977f050bf0e2828f2 2import smtplib 3from email.mime.text import MIMEText 4from email.utils import formatdate 5 6# emailを送るfrom。 7# ※要変更 8fromAddr = 'from email address' 9# emailを送るto。 10# ※要変更 11toAddr = 'to email address' 12# emailを送る際のログインパスワード 13# ※要変更 14password = 'password' 15 16# メッセージを作成する関数 17def createMessage(fromAddr, toAddr, subject, body): 18 msg = MIMEText(body) 19 msg['Subject'] = subject 20 msg['From'] = fromAddr 21 msg['To'] = toAddr 22 msg['Date'] = formatdate() 23 return msg 24 25# メッセージを送信する関数 26def sendMail(fromAddr, toAddr, bodyMsg): 27 smtpobj = smtplib.SMTP('smtp.gmail.com', 587) 28 smtpobj.ehlo() 29 smtpobj.starttls() 30 smtpobj.ehlo() 31 # ログインする。 32 smtpobj.login(fromAddr, password) 33 34 # メッセージを送信する。 35 smtpobj.sendmail(fromAddr, toAddr, bodyMsg.as_string()) 36 smtpobj.close() 37 38# ※要変更 39sendMail(fromAddr, toAddr, createMessage( 40 fromAddr, toAddr, '題名を入力してください', 'メール送信内容を入力してください。formで格納されるデータ内容'))

自分の方ではこちらでうまくいきました。

投稿2021/05/26 21:39

編集2021/05/27 23:02
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

katsumich

2021/05/27 08:44

返答誠にありがとうございます。 しかし「formのPOSTに関して問題ないこと」はcontact.pyの最後のほうでprintしていますのでformからpostして(もしくはcontという関数に文字列が入っている)状態にはなっていました。 また、「Pythonでメールを送信」をじっくり見直してみますが解決できそうではありません
退会済みユーザー

退会済みユーザー

2021/05/27 23:03 編集

> 「Pythonでメールを送信」をじっくり見直してみますが解決できそうではありません 実際にどのようなことを試されましたでしょうか?追記いただけると助かります。。 回答の追記箇所へコメントしましたので、ご確認ください。????‍♂️
katsumich

2021/06/09 01:39

返答遅くなって申し訳ないです。 pythonで行いたいことは、python版のメールフォームを作るということなんですが、 流れとしては、html上のformからpythonのソースの中の変数に代入しそれを特定のメールに送信することなんですが、短いテキストしか送れなくて困ってます。 例えば、テキストエリアに入力していただいた長文をそのまま送ると文章の途中で切れてなくなってしまう現象が起こります。メールで送信するはずのテキストエリアに書かれている内容の変数をプリントするとちゃんと出てきます。これはpythonのメールに対してのデコードの問題かな?と調べてみましたが・・・はっきりわからず・・・しかも本当にこの問題か?も疑問です。
退会済みユーザー

退会済みユーザー

2021/06/09 03:59

> pythonで行いたいことは、python版のメールフォームを作るということなんですが、 流れとしては、html上のformからpythonのソースの中の変数に代入しそれを特定のメールに送信することなんですが、短いテキストしか送れなくて困ってます。 説明足らずですみません。????‍♂️ 上記のことを早く満たしたい気持ちはわかるのですが、まずは問題を切り分けて小さく改善しないといけないと思っております。 メール送信部分に問題があるのか確認してもらうために追記コードを書かせていただきました。(このコードが正しく動かない場合、そもそものパソコンの環境依存とかそのレベルで問題を考えないといけないと思っているため。) ですので、追記コード文で動くか検証いただけるとすごく助かります????‍♂️
katsumich

2021/12/03 07:46

なかなか返答できずすいません あの後相当時間をかけて解決しました。 本当にご尽力感謝いたします。 誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問