首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

如何在 Applet 中發送電子郵件

     編輯:Java 程式設計入門

為了獲取讀者反饋,網頁設計者常在頁面嵌入 Email 連結。但這樣做會彈出郵件撰寫視窗,遮蓋原頁面,讓讀者難以參考原文內容。本文設計一個可嵌入網頁的 Java Applet,解決此問題,甚至讓沒有 Email 地址的用戶也能發送反饋。以下為完整原始碼:

import java.awt.*;
import java.applet.*;
import java.net.*;
import java.io.*;
public class Javamail extends Applet {
    private int SMTP_PORT = 25; // 郵件伺服器預設埠號
    private String appletSource = "202.99.96.140"; // 作者郵件伺服器 IP
    private TextArea msgArea;
    private TextField senderField, recipientField, hostField;

    public void init() {
        setLayout(new BorderLayout());
        Panel fields = new Panel();
        fields.setLayout(new GridLayout(3, 1));
        // 收件人
        Panel recPanel = new Panel(new GridLayout(2, 1));
        recPanel.add(new Label("Recipient"));
        recipientField = new TextField("zffan"); // 作者郵件用戶名
        recPanel.add(recipientField);
        fields.add(recPanel);
        // 寄件人
        Panel sendPanel = new Panel(new GridLayout(2, 1));
        sendPanel.add(new Label("Sender"));
        senderField = new TextField("Your Name"); // 讀者填寫用戶名
        sendPanel.add(senderField);
        fields.add(sendPanel);
        // 郵件伺服器
        Panel hostPanel = new Panel(new GridLayout(2, 1));
        hostPanel.add(new Label("Host"));
        hostField = new TextField("YourCompany.com"); // 讀者填寫郵件伺服器 IP
        hostPanel.add(hostField);
        fields.add(hostPanel);
        add("North", fields);
        msgArea = new TextArea();
        add("Center", msgArea);
        add("South", new Button("SEND"));
    }

    public boolean handleEvent(Event e) {
        if (e.id == Event.WINDOW_DESTROY) System.exit(0);
        return super.handleEvent(e);
    }

    public boolean action(Event e, Object arg) {
        if (arg.equals("SEND"))
            sendMsg(senderField.getText(), recipientField.getText(), hostField.getText());
        else
            return super.action(e, arg);
        return true;
    }

    private void sendMsg(String sender, String recipient, String senderHost) {
        try {
            Socket s = new Socket(appletSource, SMTP_PORT);
            PrintStream out = new PrintStream(s.getOutputStream());
            msgArea.selectAll();
            out.println("HELO " + senderHost); // 伺服器不驗證讀者輸入的 SMTP
            out.println("MAIL FROM: " + sender);
            out.println("RCPT TO: " + recipient);
            out.println("DATA");
            out.println(msgArea.getSelectedText());
            out.println(".");
            out.println("QUIT");
        } catch (Exception e) {
            System.out.println("Error " + e);
        }
    }
}

程式在 Win95、JDK 1.1.2、HotJava Browser 1.0 環境下測試通過。有興趣的讀者可自行補充與 SMTP 伺服器通訊時的錯誤處理邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved