0

如何使用 Gmail 的服务器发送带有附件的电子邮件,但没有 JavaMail?

我遇到过这段代码

使用此代码时如何进行身份验证(使用我的 gmail 帐户作为发件人)?可以以可以指定主题的方式编辑此代码吗?我猜这 file.txt 充当附件?

编辑:这是链接中的代码,适合我的需要(或多或少)。唯一的区别是文件位置、smtp 服务器以及“from”和“to”字符串。

public static void blabla() throws IOException, UnknownHostException {
        String msgFile = "C:\\file.txt";
        String from = "myemailaccount@gmail.com";
        String to = "otheremailaccount@gmail.com";
        String mailHost = "smtp.gmail.com";
        SMTP mail = new SMTP(mailHost);
        if (mail != null) {
            if (mail.send(new FileReader(msgFile), from, to)) {
                System.out.println("Mail sent.");
            } else {
                System.out.println("Connect to SMTP server failed!");
            }
        }
        System.out.println("Done.");
    }



    static class SMTP {
        private final static int SMTP_PORT = 25;

        InetAddress mailHost;

        InetAddress localhost;

        BufferedReader in;

        PrintWriter out;

        public SMTP(String host) throws UnknownHostException {
            mailHost = InetAddress.getByName(host);
            localhost = InetAddress.getLocalHost();
            System.out.println("mailhost = " + mailHost);
            System.out.println("localhost= " + localhost);
            System.out.println("SMTP constructor done\n");
        }

        @SuppressWarnings({"resource", "unused"})
        public boolean send(FileReader msgFileReader, String from, String to)
                throws IOException {
            Socket smtpPipe;
            InputStream inn;
            OutputStream outt;
            BufferedReader msg;
            msg = new BufferedReader(msgFileReader);
            smtpPipe = new Socket(mailHost, SMTP_PORT);
            if (smtpPipe == null) {
                return false;
            }
            inn = smtpPipe.getInputStream();
            outt = smtpPipe.getOutputStream();
            in = new BufferedReader(new InputStreamReader(inn));
            out = new PrintWriter(new OutputStreamWriter(outt), true);
            if (inn == null || outt == null) {
                System.out.println("Failed to open streams to socket.");
                return false;
            }

            String initialID = in.readLine();

            System.out.println(initialID);
            System.out.println("HELO " + localhost.getHostName());
            out.println("HELO " + localhost.getHostName());

            String welcome = in.readLine();

            System.out.println(welcome);
            System.out.println("MAIL From:<" + from + ">");
            out.println("MAIL From:<" + from + ">");

            String senderOK = in.readLine();

            System.out.println(senderOK);
            System.out.println("RCPT TO:<" + to + ">");
            out.println("RCPT TO:<" + to + ">");

            String recipientOK = in.readLine();

            System.out.println(recipientOK);
            System.out.println("DATA");
            out.println("DATA");

            String line;
            while ((line = msg.readLine()) != null) {
                out.println(line);
            }

            System.out.println(".");
            out.println(".");

            String acceptedOK = in.readLine();

            System.out.println(acceptedOK);
            System.out.println("QUIT");
            out.println("QUIT");

            return true;
        }
4

1 回答 1

0

通过 GMails SMTP 服务发送电子邮件有一些技巧。

尝试通读

于 2012-09-22T23:00:09.340 回答