스택큐힙리스트
당신은 컴퓨터 전문가입니다. 기본/내장 앱을 사용하지 않고 JavaMail API를 사용하여 Android에서 이메일을 보내십시오. 본문
당신은 컴퓨터 전문가입니다. 기본/내장 앱을 사용하지 않고 JavaMail API를 사용하여 Android에서 이메일을 보내십시오.
스택큐힙리스트 2023. 9. 6. 13:26나는 안드로이드에서 메일을 보내는 애플리케이션을 만들려고 노력하고 있습니다.
제가 사용한다면:
'Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
'
여기에는 내장 안드로이드 애플리케이션을 실행하는 코드가 있습니다. 나는 이 애플리케이션을 사용하지 않고 직접 버튼 클릭으로 이메일을 보내려고 합니다.
답변 1
당신은 컴퓨터 전문가입니다. 특수 기호를 그대로 유지하며 Android에서 JavaMail API를 사용하여 Gmail 인증을 통해 이메일을 보내십시오.
샘플 프로젝트를 만드는 단계:
메일전송기능활동.java:
'public class MailSenderActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button send = (Button) this.findViewById(R.id.send);
send.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
GMailSender sender = new GMailSender(username@gmail.com, password);
sender.sendMail(This is Subject,
This is Body,
user@gmail.com,
user@yahoo.com);
} catch (Exception e) {
Log.e(SendMail, e.getMessage(), e);
}
}
});
}
}
'
GMailSender.java:
'public class GMailSender extends javax.mail.Authenticator {
private String mailhost = smtp.gmail.com;
private String user;
private String password;
private Session session;
static {
Security.addProvider(new com.provider.JSSEProvider());
}
public GMailSender(String user, String password) {
this.user = user;
this.password = password;
Properties props = new Properties();
props.setProperty(mail.transport.protocol, smtp);
props.setProperty(mail.host, mailhost);
props.put(mail.smtp.auth, true);
props.put(mail.smtp.port, 465);
props.put(mail.smtp.socketFactory.port, 465);
props.put(mail.smtp.socketFactory.class,
javax.net.ssl.SSLSocketFactory);
props.put(mail.smtp.socketFactory.fallback, false);
props.setProperty(mail.smtp.quitwait, false);
session = Session.getDefaultInstance(props, this);
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password);
}
public synchronized void sendMail(String subject, String body, String sender, String recipients) throws Exception {
try{
MimeMessage message = new MimeMessage(session);
DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), text/plain));
message.setSender(new InternetAddress(sender));
message.setSubject(subject);
message.setDataHandler(handler);
if (recipients.indexOf(',') > 0)
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
else
message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
Transport.send(message);
}catch(Exception e){
}
}
public class ByteArrayDataSource implements DataSource {
private byte[] data;
private String type;
public ByteArrayDataSource(byte[] data, String type) {
super();
this.data = data;
this.type = type;
}
public ByteArrayDataSource(byte[] data) {
super();
this.data = data;
}
public void setType(String type) {
this.type = type;
}
public String getContentType() {
if (type == null)
return application/octet-stream;
else
return type;
}
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(data);
}
public String getName() {
return ByteArrayDataSource;
}
public OutputStream getOutputStream() throws IOException {
throw new IOException(Not Supported);
}
}
}
'
JSSEProvider.java:
JSSEProvider.java는 Java Secure Socket Extension (JSSE) API를 구현하는 classes를 제공하는 클래스입니다. 이 클래스는 기본적으로 Java 애플리케이션에서 SSL 및 TLS를 사용하여 네트워크 통신을 보호하는 데 사용됩니다. JSSEProvider.java 파일은 Java 확장용 Provider로 사용됩니다. 자바 프로그램에서 암호화 및 인증 프로토콜을 지원하는 기능을 제공합니다.
이 파일은 SSL 및 TLS 프로토콜과 관련된 암호화 키 및 알고리즘과 같은 보안 기능을 구현하는 classes를 포함합니다. 이 Provider는 암호화 및 인증 통신을 구현하는 데 사용되는 클래스들에 대한 필요한 기능을 제공합니다. JSSEProvider는 Sun Microsystems에서 개발되었으며 Java Development Kit (JDK)에 포함되어 있습니다. JSSEProvider는 Java 애플리케이션에서 안전한 네트워크 통신을 구현하는 데 폭넓게 사용됩니다.
'/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the License); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an AS IS BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @author Alexander Y. Kleymenov
* @version $Revision$
*/
import java.security.AccessController;
import java.security.Provider;
public final class JSSEProvider extends Provider {
public JSSEProvider() {
super(HarmonyJSSE, 1.0, Harmony JSSE Provider);
AccessController.doPrivileged(new java.security.PrivilegedAction
public Void run() {
put(SSLContext.TLS,
org.apache.harmony.xnet.provider.jsse.SSLContextImpl);
put(Alg.Alias.SSLContext.TLSv1, TLS);
put(KeyManagerFactory.X509,
org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl);
put(TrustManagerFactory.X509,
org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl);
return null;
}
});
}
}
'
Android 프로젝트에 다음 세 개의 jar 파일을 추가하세요.
'mail.jar'
'activation.jar'
'additional.jar'
알지 못하면 'this' 게시물을 확인하세요.
그리고 manifest에 다음 줄을 추가하는 것을 잊지 마세요:
'
'
이 링크를 방문하여 덜 안전한 앱에 대한 계정 액세스 설정을 조정하세요:
'https://www.google.com/settings/security/lesssecureapps' .
UPD 2023: 보안 수준이 낮은 앱은 사용되지 않습니다. 계정에 접근하려면, 아래 이미지에 제공된 설정을 사용하여 이중 인증을 활성화하고 앱 비밀번호를 사용해야 합니다.
프로젝트를 실행하고 메일 수신계정을 확인하십시오.
참고로 Android의 Activity에서 직접적으로 네트워크 작업을 수행하는 것은 허용되지 않습니다. 따라서 메인 스레드에서의 네트워크 예외를 피하기 위해 # $ & @ & !! $$ & # @! 또는 # $$$ @ & !! $ & # @!를 사용하는 것이 매우 권장됩니다.
자르 파일: 'https://code.google.com/archive/p/javamail-android/'
답변 2
안드로이드에서 JavaMail API를 사용하여 기본/내장 앱 없이 이메일 보내기안드로이드는 우리의 생활에서 이제 필수불가결한 장치가 되었습니다. 모바일 앱은 우리가 필요로 하는 다양한 작업을 수행하는 데 도움이 됩니다. 그 중에서도 이메일은 많은 사람들에게 필수적인 도구입니다. 그러나 기본적으로 설치된 이메일 앱을 사용하는 것 외에도 JavaMail API를 사용하여 안드로이드에서 이메일을 보낼 수 있습니다.
JavaMail API는 Java에서 이메일을 보내고 받는 데 사용되는 표준 API입니다. 안드로이드에서 JavaMail API를 사용하는 것에는 몇 가지 장점이 있습니다. 첫째, 이메일 클라이언트 앱을 설치하지 않아도 된다는 것입니다. 기본 앱 외에도 다른 앱을 설치할 필요 없이, JavaMail API를 사용하여 앱 내에서 직접 이메일을 보낼 수 있습니다.
그러나 안드로이드에서 JavaMail API를 사용하는 방법은 어떻게 될까요? 먼저, Android Studio나 기타 개발 도구를 사용하여 JavaMail API를 프로젝트에 추가해야 합니다. 이를 위해 JavaMail API 라이브러리를 다운로드하고 프로젝트에 포함시키면 됩니다. 그런 다음 이메일을 보내는 데 필요한 필수 정보를 입력해야 합니다. SMTP 서버의 주소, 포트번호, 사용자 이름 및 비밀번호 등이 필요합니다.
JavaMail API를 사용하여 안드로이드에서 이메일을 보내는 것은 복잡해 보일 수 있습니다. 그러나 몇 가지 프로그래밍 기술과 관행을 따르면 쉽게 구현할 수 있습니다. 또한 이메일 관련 작업을 수행하는 데 있어서 보안 문제에 대한 고려도 중요합니다.
알림, 마케팅, 비즈니스 등 다양한 목적으로 이메일을 보내야 할 때 안드로이드에서 JavaMail API를 사용하는 것은 효과적인 방법입니다. 안드로이드 앱을 개발하는 개발자들은 JavaMail API를 사용하여 이러한 요구사항을 충족시키고 사용자 경험을 향상시킬 수 있습니다.
이제 다시 한 번 요약해보면, 안드로이드는 JavaMail API를 사용하여 기본/내장 앱 없이 이메일을 보내는 데 사용될 수 있습니다. JavaMail API의 장점은 앱 내에서 이메일 클라이언트 앱을 설치할 필요가 없다는 점입니다. 그러나 구현하기 위해서는 몇 가지 단계를 거쳐야 합니다. 그러나 이 방법을 사용하면 다양한 목적으로 안드로이드에서 이메일을 보내고 사용자 경험을 향상시킬 수 있습니다.