Gmail adalah salah satu aplikasi online yang umum digunakan untuk mengirim dan menerima email. Selain itu, memungkinkan bekerja dengan kalender, kontak, obrolan, dll., dan menyediakan berbagai layanan kolaborasi lainnya. Baru-baru ini, di sebuah artikel, kami telah membahas cara mengimpor kontak dari akun Gmail. Hari ini, Anda akan belajar cara membuat, memperbarui, dan menghapus kontak di akun Gmail menggunakan Java.
- Java API untuk Mengelola Kontak Gmail
- Buat Kontak di Gmail
- Perbarui Kontak di Gmail
- Hapus Kontak di Gmail
API Java untuk Membuat, Memperbarui, dan Menghapus Kontak Gmail
Untuk membuat dan memanipulasi kontak di akun Gmail, kami akan menggunakan Aspose.Email for Java. Ini adalah API kaya fitur yang memungkinkan Anda membuat dan mengirim email dan bekerja dengan klien email populer. Anda dapat mengunduh API atau menginstalnya menggunakan konfigurasi Maven berikut.
Gudang:
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>http://repository.aspose.com/repo/</url>
</repository>
Ketergantungan:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-email</artifactId>
<version>22.3</version>
<classifier>jdk16</classifier>
</dependency>
Setelah menginstal API, Anda perlu membuat proyek di Konsol Pengembang Google, yang memungkinkan Anda berkomunikasi dengan Gmail. Untuk membuatnya, Anda dapat mengikuti panduan ini.
Sekarang, buat kelas pembantu bernama GoogleOAuthHelper untuk menangani autentikasi akun Gmail. Buat juga kelas bernama OAuthUser untuk menyimpan informasi pengguna. Berikut implementasi lengkap dari kedua class tersebut.
public class OAuthUser {
String email;
String clientId;
String clientSecret;
String refreshToken;
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import javax.xml.bind.DatatypeConverter;
/**
* <p>
* Konsol pengembang https://console.developers.google.com/projectselector/apis/credentials?pli=1
* Dokumentasi https://developers.google.com/identity/protocols/OAuth2InstalledApp
* </p>
*/
class GoogleOAuthHelper {
public static final String AUTHORIZATION_URL = "https://accounts.google.com/o/oauth2/v2/auth";
public static final String TOKEN_REQUEST_URL = "https://oauth2.googleapis.com/token";
public static final String REDIRECT_URI = "urn:ietf:wg:oauth:2.0:oob";
public static final String REDIRECT_TYPE = "code";
public static final String SCOPE = "https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar" // Calendar
+ "+https%3A%2F%2Fwww.google.com%2Fm8%2Ffeeds%2F" // Contacts
+ "+https%3A%2F%2Fmail.google.com%2F"; // IMAP & SMTP
static String createCodeChalange() {
String verifierStr = UUID.randomUUID().toString() + "-" + UUID.randomUUID().toString();
System.out.println("Code Verifier: " + verifierStr);
MessageDigest digest;
try {
digest = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
throw new IllegalAccessError(e.getMessage());
}
byte[] hash = digest.digest(verifierStr.getBytes(StandardCharsets.UTF_8));
String base64Hash = DatatypeConverter.printBase64Binary(hash);
base64Hash = base64Hash.split("=")[0];
base64Hash = base64Hash.replace('+', '-').replace('/', '_');
return base64Hash;
}
static String getAuthorizationCodeUrl(OAuthUser acc) {
return getAuthorizationCodeUrl(acc, SCOPE, REDIRECT_URI, REDIRECT_TYPE);
}
static String getAuthorizationCodeUrl(OAuthUser acc, String scope, String redirectUri, String responseType) {
System.out.println("---------------------------------------------------------");
System.out.println("------------- OAuth 2.0 AuthorizationCodeUrl -------------");
System.out.println("---------------------------------------------------------");
System.out.println("Login: " + acc.email);
String codeChallenge = createCodeChalange();
String state = urlEncode(UUID.randomUUID().toString());
String approveUrl = AUTHORIZATION_URL + "?client_id=" + acc.clientId + "&redirect_uri=" + redirectUri + "&response_type=" + responseType + "&scope=" + scope
+ "&code_challenge=" + codeChallenge + "&code_challenge_method=S256&state=" + state;
System.out.println("Approve Url: " + approveUrl);
return approveUrl;
}
static String urlEncode(String value) {
try {
return URLEncoder.encode(value, StandardCharsets.UTF_8.toString());
} catch (UnsupportedEncodingException e) {
throw new IllegalAccessError(e.getMessage());
}
}
static String urlDecode(String value) {
try {
return URLDecoder.decode(value, StandardCharsets.UTF_8.toString());
} catch (UnsupportedEncodingException e) {
throw new IllegalAccessError(e.getMessage());
}
}
static String getAccessTokenByAuthCode(String authorizationCode, String codeVerifier, OAuthUser user) {
String encodedParameters = "client_id=" + urlEncode(user.clientId) + "&client_secret=" + urlEncode(user.clientSecret) + "&code=" + urlEncode(authorizationCode)
+ "&code_verifier=" + codeVerifier + "&redirect_uri=" + urlEncode(REDIRECT_URI) + "&grant_type=authorization_code";
System.out.println("---------------------------------------------------------");
System.out.println("------------- OAuth 2.0 AccessTokenByAuthCode -------------");
System.out.println("---------------------------------------------------------");
System.out.println("Authorization code: " + authorizationCode);
String result = "";
Map<String, String> token = geToken(encodedParameters);
for (String key : token.keySet()) {
System.out.println(key + ": " + token.get(key));
if (key.equals("refresh_token")) {
result = token.get(key);
}
}
System.out.println("---------------------------------------------------------");
return result;
}
static String getAccessTokenByRefreshToken(OAuthUser user) {
String encodedParameters = "client_id=" + urlEncode(user.clientId) + "&client_secret=" + urlEncode(user.clientSecret) + "&refresh_token=" + urlEncode(user.refreshToken)
+ "&grant_type=refresh_token";
System.out.println("---------------------------------------------------------");
System.out.println("----------- OAuth 2.0 AccessTokenByRefreshToken -----------");
System.out.println("---------------------------------------------------------");
System.out.println("Login: " + user.email);
String result = "";
Map<String, String> token = geToken(encodedParameters);
for (String key : token.keySet()) {
System.out.println(key + ": " + token.get(key));
if (key.equals("access_token")) {
result = token.get(key);
}
}
System.out.println("---------------------------------------------------------");
return result;
}
static Map<String, String> geToken(String encodedParameters) {
try {
HttpURLConnection connection = (HttpURLConnection) new URL(TOKEN_REQUEST_URL).openConnection();
connection.setRequestMethod("POST");
byte[] requestData = encodedParameters.getBytes(StandardCharsets.UTF_8);
connection.setUseCaches(false);
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length", "" + requestData.length);
final OutputStream st = connection.getOutputStream();
try {
st.write(requestData, 0, requestData.length);
} finally {
st.flush();
st.close();
}
connection.connect();
if (connection.getResponseCode() >= HttpURLConnection.HTTP_BAD_REQUEST) {
throw new IllegalAccessError("Operation failed: " + connection.getResponseCode() + "/" + connection.getResponseMessage() + "\r\nDetails:\r\n{2}"
+ readInputStream(connection.getErrorStream()));
}
String responseText = readInputStream(connection.getInputStream());
Map<String, String> result = new HashMap<String, String>();
System.out.println(responseText);
String[] strs = responseText.replace("{", "").replace("}", "").replace("\"", "").replace("\r", "").replace("\n", "").split(",");
for (String sPair : strs) {
String[] pair = sPair.split(":");
String name = pair[0].trim().toLowerCase();
String value = urlDecode(pair[1].trim());
result.put(name, value);
}
return result;
} catch (IOException e) {
throw new IllegalAccessError(e.getMessage());
}
}
static String readInputStream(InputStream is) {
if (is == null)
return "";
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder result = new StringBuilder();
String line;
try {
while ((line = reader.readLine()) != null) {
result.append(line);
}
} catch (IOException e) {
// mengabaikan
}
return result.toString();
}
}
Buat Kontak di Gmail di Jawa
Berikut langkah-langkah membuat kontak pada Gmail di Java.
- Pertama, buat pengguna Google, dapatkan token akses, dan inisialisasi objek IGmailClient.
- Kemudian, buat objek dari kelas Kontak.
- Tetapkan properti kontak seperti nama, awalan, profesi, dll.
- Untuk menyetel alamat pos, buat instance PostalAddress dan setel propertinya.
- Tambahkan alamat yang baru dibuat ke koleksi menggunakan metode Contact.getPhysicalAddresses().add(PostalAddress).
- Tetapkan detail nomor telepon menggunakan kelas NomorTelepon.
- Tambahkan detail nomor telepon ke koleksi menggunakan metode Contact.getPhoneNumbers().add(PhoneNumber).
- Buat instance dari kelas EmailAddress, atur alamat email, dan tetapkan ke kontak.
- Terakhir, panggil metode IGmailClient.createContact(Contact) untuk membuat kontak Gmail.
Contoh kode berikut menunjukkan cara membuat kontak di Gmail di Java.
OAuthUser user = new OAuthUser();
// Atur clientId, clientSecret dan email
user.clientId = "<<clientID>>";
user.clientSecret = "<<clientSecret>>";
user.email = "<<email>>";
// Anda harus mengambil AuthorizationCode secara manual dengan AuthorizationCodeUrl yang dihasilkan
// Setel kode otorisasi
String authorizationCode = "<<authCode>>";
// Salin Pemverifikasi Kode dari output langkah sebelumnya
// Tetapkan pemverifikasi kode
String codeVerifier = "<<codeVerifier>>";
// Dapatkan Token Penyegaran
String refreshToken = GoogleOAuthHelper.getAccessTokenByAuthCode(authorizationCode, codeVerifier, user);
user.refreshToken = refreshToken;
// Dapatkan Token Akses
String accessToken = GoogleOAuthHelper.getAccessTokenByRefreshToken(user);
// Gunakan Token Akses di API
IGmailClient client = GmailClient.getInstance(accessToken, user.email);
// Buat Kontak
Contact contact = new Contact();
contact.setPrefix("Prefix");
contact.setGivenName("GivenName");
contact.setSurname("Surname");
contact.setMiddleName("MiddleName");
contact.setDisplayName("DisplayName");
contact.setSuffix("Suffix");
contact.setJobTitle("JobTitle");
contact.setDepartmentName("DepartmentName");
contact.setCompanyName("CompanyName");
contact.setProfession("Profession");
contact.setNotes("Notes");
// Tetapkan alamat pos
PostalAddress address = new PostalAddress();
address.setCategory(PostalAddressCategory.getWork());
address.setAddress("Address");
address.setStreet("Street");
address.setPostOfficeBox("PostOfficeBox");
address.setCity("City");
address.setStateOrProvince("StateOrProvince");
address.setPostalCode("PostalCode");
address.setCountry("Country");
contact.getPhysicalAddresses().add(address);
// Tetapkan nomor telepon
PhoneNumber pnWork = new PhoneNumber();
pnWork.setNumber("323423423423");
pnWork.setCategory(PhoneNumberCategory.getWork());
contact.getPhoneNumbers().add(pnWork);
PhoneNumber pnHome = new PhoneNumber();
pnHome.setNumber("323423423423");
pnHome.setCategory(PhoneNumberCategory.getHome());
contact.getPhoneNumbers().add(pnHome);
PhoneNumber pnMobile = new PhoneNumber();
pnMobile.setNumber("323423423423");
pnMobile.setCategory(PhoneNumberCategory.getMobile());
contact.getPhoneNumbers().add(pnMobile);
// Tetapkan detail lainnya
contact.getUrls().setBlog("Blog.com");
contact.getUrls().setBusinessHomePage("BusinessHomePage.com");
contact.getUrls().setHomePage("HomePage.com");
contact.getUrls().setProfile("Profile.com");
contact.getEvents().setBirthday(new Date());
contact.getEvents().setAnniversary(new Date());
contact.getInstantMessengers().setAIM("AIM");
contact.getInstantMessengers().setGoogleTalk("GoogleTalk");
contact.getInstantMessengers().setICQ("ICQ");
contact.getInstantMessengers().setJabber("Jabber");
contact.getInstantMessengers().setMSN("MSN");
contact.getInstantMessengers().setQQ("QQ");
contact.getInstantMessengers().setSkype("Skype");
contact.getInstantMessengers().setYahoo("Yahoo");
contact.getAssociatedPersons().setSpouse("Spouse");
contact.getAssociatedPersons().setSister("Sister");
contact.getAssociatedPersons().setRelative("Relative");
contact.getAssociatedPersons().setReferredBy("ReferredBy");
contact.getAssociatedPersons().setPartner("Partner");
contact.getAssociatedPersons().setParent("Parent");
contact.getAssociatedPersons().setMother("Mother");
contact.getAssociatedPersons().setManager("Manager");
// Tetapkan alamat email
EmailAddress eAddress = new EmailAddress();
eAddress.setAddress("email@gmail.com");
contact.getEmailAddresses().add(eAddress);
// Buat kontak
String contactUri = client.createContact(contact);
Perbarui Kontak di Gmail di Jawa
Anda juga dapat memperbarui detail kontak Gmail setelah mengaksesnya. Berikut ini adalah langkah-langkah memperbarui kontak di akun Gmail di Jawa.
- Pertama, buat pengguna Google, dapatkan token akses, dan inisialisasi objek IGmailClient.
- Kemudian, dapatkan kontak dalam array menggunakan metode IGmailClient.getAllContacts().
- Setelah itu, ambil kontak yang diperlukan dari array di objek Kontak.
- Terakhir, perbarui detail kontak dan panggil metode IGmailClient.updateContact(contact).
Contoh kode berikut menunjukkan cara memperbarui kontak di Gmail di Java.
Hapus Kontak di Gmail di Jawa
Terakhir, mari kita lihat cara menghapus kontak Gmail menggunakan Java. Berikut ini adalah langkah-langkah untuk melakukan operasi ini.
- Pertama, buat pengguna Google, dapatkan token akses, dan inisialisasi objek IGmailClient.
- Kemudian, dapatkan kontak dalam array menggunakan metode IGmailClient.getAllContacts().
- Filter kontak yang diinginkan dari array di objek Kontak.
- Terakhir, panggil metode IGmailClient.deleteContact(Contact.Id.GoogleId) untuk menghapus kontak.
Contoh kode berikut menunjukkan cara menghapus kontak di Gmail di Java.
OAuthUser user = new OAuthUser();
// Atur clientId, clientSecret dan email
user.clientId = "<<clientID>>";
user.clientSecret = "<<clientSecret>>";
user.email = "<<email>>";
// Anda harus mengambil AuthorizationCode secara manual dengan AuthorizationCodeUrl yang dihasilkan
// Setel kode otorisasi
String authorizationCode = "<<authCode>>";
// Salin Pemverifikasi Kode dari output langkah sebelumnya
// Tetapkan pemverifikasi kode
String codeVerifier = "<<codeVerifier>>";
// Dapatkan Token Penyegaran
String refreshToken = GoogleOAuthHelper.getAccessTokenByAuthCode(authorizationCode, codeVerifier, user);
user.refreshToken = refreshToken;
// Dapatkan Token Akses
String accessToken = GoogleOAuthHelper.getAccessTokenByRefreshToken(user);
// Gunakan Token Akses di API
IGmailClient client = GmailClient.getInstance(accessToken, user.email);
// Dapatkan semua kontak
Contact[] contacts = client.getAllContacts();
// Ambil yang diperlukan
Contact contact = contacts[0];
// Hapus kontak
client.deleteContact(contact.getId().getGoogleId());
Dapatkan Lisensi API Gratis
Anda dapat menggunakan Aspose.Email for Java tanpa batasan evaluasi menggunakan lisensi sementara gratis.
Kesimpulan
Pada artikel ini, Anda telah mempelajari cara membuat dan memperbarui kontak di akun Gmail di Java. Selanjutnya, Anda telah melihat cara menghapus kontak Gmail secara terprogram. Selain itu, Anda dapat mengunjungi dokumentasi untuk menjelajahi fitur lain dari Aspose.Email for Java. Jika Anda memiliki pertanyaan, Anda dapat memposting ke [forum] kami 24.