は、デコードされた334 VXNlcm5hbWU6は、「ユーザー名」で受け取りますサーバー上でユーザー名を送信する方法を理解できないようです。私はユーザー名をエンコードして送信していますが、返信はありません。次の返信は私のパスワードを尋ねることです。のJava - - SSLは、GmailのSMTPサーバーで認証
は、以下を参照してください。
public class MailComponent{
Socket socket = null;
final static String MAIL_SERVER = "smtp.gmail.com";
final static int SMTP_PORT = 465;
String uName = "[email protected]";
String encodedName = Base64.getEncoder().encodeToString(uName.getBytes(StandardCharsets.UTF_8));
public MailComponent(){ /*Create constructor later*/}
public void sendMail() throws Exception{
try{
// Establish TCP Connection With Mail Server
socket = ((SSLSocketFactory) SSLSocketFactory.getDefault()).createSocket(MAIL_SERVER, SMTP_PORT);
// Create a Buffered Reader to read one line at a time
InputStream inStream = socket.getInputStream();
InputStreamReader inReader = new InputStreamReader(inStream);
BufferedReader bReader = new BufferedReader(inReader);
// Read Server's Greeting
String serverResponse = bReader.readLine();
System.out.println("Server Greeting: " + serverResponse);
if (!serverResponse.startsWith("220")){
throw new Exception("220 Reply Not Received From Server!");
}
// Reference socket's output stream
OutputStream oStream = socket.getOutputStream();
// Send HELO command
String heloCommand = "HELO smtp.gmail.com\r\n";
oStream.write(heloCommand.getBytes("US-ASCII"));
serverResponse = bReader.readLine();
System.out.println("HELO Response: " + serverResponse);
if (!serverResponse.startsWith("250"))
throw new Exception("250 Reply Not Received From Server!");
// Obtain Authorization
String authCommand = "AUTH LOGIN\r\n";
oStream.write(authCommand.getBytes("US-ASCII"));
serverResponse = bReader.readLine();
System.out.println("Auth Response: " + serverResponse);
// Give Username
oStream.write(encodedName.getBytes(StandardCharsets.UTF_8));
serverResponse = bReader.readLine();
System.out.println("Username Response: " + serverResponse);
すべてが正常に動作するようですが、私は自分のユーザー名を送ったら、私は任意の応答を受信しません。これがなぜ起こったのかについてのアイデアはありますか?
私はポート587も使ってみました。私は同じ問題を得る。実際のAuthorizationコマンドの内容はわかりません。今、私は "AUTH LOGIN \ r \ n"を試みています。私は同じ返信を受け取ります。 authコマンドは何をすべきか知っていますか? – FoxDonut
587暗号化されていない接続を介して資格情報を送信できないため、認証する前にTSLに切り替える必要があります。 –
私はSTARTTLSを使用して、TLSが開始されたというメッセージをサーバーから取得しましたが、そこからは何もできません。それ以降に送信するコマンドは、何の応答もしません(良いか悪いか)。 使用するコマンドの例を教えてください。私はこの間何日もやっていて、解決策を探していました。 – FoxDonut