python cgi と smtplib および imaplib を使用して、独自の Web メール アプリケーションを作成しようとしています。「送信」フォームの送信ボタンを押すと、メールが送信されますが、その後更新するたびにメッセージが再度送信されます。ページ (cgi スクリプト) は、javascript を介して 2 分ごとに自動的に更新されます。
<script language="javascript">
window.setInterval('refresh()', 180000);
function refresh()
{
// this checks to see which tab is selected, page is refreshed only if compose tab is not selected
elList = document.getElementsByTagName("a");
for (i = 0; i < elList.length; i++)
{
if (elList[i].className === 'tab active')
{
var activeTab = elList[i].innerHTML;
}
}
if (activeTab.indexOf("Unread") >= 0)
{
window.location.reload(true);
}
}
</script>
フォームデータが複数回送信されたのか、単に複数回読み取られたのかはわかりません。ただし、更新時にフォームを再度送信する必要がある理由はわかりません。そのため、フォームが複数回読み取られているだけだと信じなければなりません。フォーム データの読み取りを可能にするコンポーネントは次のとおりです。
# Create instance of FieldStorage
form = cgi.FieldStorage()
if form.keys() != []:
for x in form.keys():
if x == 'send':
send_email()
ページ ヘッド タグで JavaScript を使用してフォームをリセットしようとしましたが、うまくいきませんでした:
<script language="javascript">
Form.reset('send'); // reset send form so email is not sent again
</script>
完全を期すために、フォーム定義は次のとおりです。
<form name="send" action="/cgi-bin/myemail.py" method="post" >
<table id="example" class="compose" >
<tr>
<td><input type="submit" value="To:" style="height: 1.95em; width: 4em"></td><td><input type="text" name="send_to" size="90"></td><td><input type="submit" name="send" value="SEND" style="height: 1.95em; width: 12em"></td>
</tr>
<tr>
<td><input type="submit" value="Cc:" style="height: 1.95em; width: 4em"></td><td><input type="text" name="send_cc" size="90"></td> <td><input type="submit" name="send" value="SAVE" style="height: 1.95em; width: 12em"></td>
</tr>
<tr>
<td><input type="submit" value="Bcc:" style="height: 1.95em; width: 4em"></td><td><input type="text" name="send_bcc" size="90"></td> <td><input type="submit" name="send" value="DELETE" style="height: 1.95em; width: 12em"></td>
</tr>
<tr>
<td><input type="submit" value="Subj:" style="height: 1.95em; width: 4em"></td><td><input type="text" name="send_subj" size="90"></td> <td><input type="submit" name="send" size="200" value="ATTACH" style="height: 1.95em; width: 12em"></td>
</tr>
<tr>
<td colspan="3">
<!-- <td colspan="3"> <div id="result" class="body" style="background-color:#000000"></div></td> -->
<textarea name="send_body" cols="118" rows="23"> </textarea>
</td>
</tr>
</table>
</form>
このフォーム データが複数回読み取られないようにするにはどうすればよいですか? ありがとう。