gpt4 book ai didi

java - 使用socket连接gmail并发送gmail,但不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 12:07:02 24 4
gpt4 key购买 nike

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class SMTPDemo {

public static void main(String args[]) throws IOException,
UnknownHostException {
String msgFile = "file.txt";
String from = "java2s@java2s.com";
String to = "yourEmail@yourServer.com";
String mailHost = "yourHost";
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");
}

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;
}
}
}

我想了解如何使 smtp 服务器使用套接字。我在 this site 上找到了这个示例代码。

当我在 Eclipse 中编写此代码并编译时,socekt smtpPipe 出现错误。Eclipse 错误消息:

Resource leak : 'smtpPipe is never closed'.

我不知道如何解决这个问题。

最佳答案

Eclipse error message : Resource leak : 'smtpPipe is never closed'

它表示您没有关闭资源smtpPipe。建议的做法是在不再需要资源时关闭该资源。您可以通过调用 smtpPipe.close() 方法来实现此目的。一种方法是将代码包装在 tryfinally block 周围。阅读有关finally block 的更多信息 here .

示例:

try {
....
smtpPipe = new Socket(mailHost, SMTP_PORT);
....

} finally {
if (smtpPipe != null)
smtpPipe.close();
}

此外,对其他资源(例如 InputStreamOutputStream)使用类似的方法

关于java - 使用socket连接gmail并发送gmail,但不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40255179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com