Gmail เป็นหนึ่งในแอปพลิเคชันออนไลน์ที่ใช้กันทั่วไปสำหรับการส่งและรับอีเมล นอกจากนี้ยังอนุญาตให้ทำงานกับปฏิทิน ผู้ติดต่อ แชท ฯลฯ และให้บริการการทำงานร่วมกันอื่นๆ อีกมากมาย เมื่อเร็ว ๆ นี้ ใน บทความ เราได้กล่าวถึงวิธีการนำเข้าผู้ติดต่อจากบัญชี Gmail วันนี้ คุณจะได้เรียนรู้วิธีสร้าง อัปเดต และลบผู้ติดต่อในบัญชี Gmail โดยใช้ Java
Java API เพื่อสร้าง อัปเดต และลบผู้ติดต่อ Gmail
ในการสร้างและจัดการผู้ติดต่อในบัญชี Gmail เราจะใช้ Aspose.Email for Java เป็น API ที่มีคุณลักษณะหลากหลายซึ่งช่วยให้คุณสร้างและส่งอีเมลและทำงานร่วมกับไคลเอ็นต์อีเมลยอดนิยมได้ คุณสามารถ ดาวน์โหลด API หรือติดตั้งโดยใช้การกำหนดค่า Maven ต่อไปนี้
พื้นที่เก็บข้อมูล:
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>http://repository.aspose.com/repo/</url>
</repository>
การพึ่งพา:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-email</artifactId>
<version>22.3</version>
<classifier>jdk16</classifier>
</dependency>
หลังจากติดตั้ง API คุณต้องสร้างโครงการบน Google Developer Console ซึ่งจะช่วยให้คุณสามารถสื่อสารกับ Gmail หากต้องการสร้าง คุณสามารถทำตาม คู่มือนี้
ตอนนี้ สร้างคลาสผู้ช่วยเหลือชื่อ GoogleOAuthHelper เพื่อดูแลการตรวจสอบสิทธิ์ของบัญชี Gmail สร้างคลาสชื่อ OAuthUser เพื่อเก็บข้อมูลผู้ใช้ ต่อไปนี้คือการใช้งานทั้งสองคลาสอย่างสมบูรณ์
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>
* คอนโซลนักพัฒนา https://console.developers.google.com/projectselector/apis/credentials?pli=1
* เอกสาร 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) {
// ไม่สนใจ
}
return result.toString();
}
}
สร้างผู้ติดต่อบน Gmail ใน Java
ต่อไปนี้เป็นขั้นตอนในการสร้างผู้ติดต่อบน Gmail ใน Java
- ขั้นแรก สร้างผู้ใช้ Google รับโทเค็นการเข้าถึง และเริ่มต้นวัตถุ IGmailClient
- จากนั้น สร้างวัตถุของคลาส Contact
- กำหนดคุณสมบัติของผู้ติดต่อ เช่น ชื่อ คำนำหน้า อาชีพ ฯลฯ
- ในการตั้งค่าที่อยู่ทางไปรษณีย์ ให้สร้างอินสแตนซ์ของ PostalAddress และตั้งค่าคุณสมบัติ
- เพิ่มที่อยู่ที่สร้างขึ้นใหม่ในคอลเลกชันโดยใช้เมธอด Contact.getPhysicalAddresses().add(PostalAddress)
- กำหนดรายละเอียดหมายเลขโทรศัพท์โดยใช้คลาส PhoneNumber
- เพิ่มรายละเอียดหมายเลขโทรศัพท์ไปยังคอลเลกชันโดยใช้เมธอด Contact.getPhoneNumbers().add(PhoneNumber)
- สร้างอินสแตนซ์ของคลาส EmailAddress ตั้งค่าที่อยู่อีเมล และกำหนดให้กับผู้ติดต่อ
- สุดท้าย เรียกเมธอด IGmailClient.createContact(Contact) เพื่อสร้างผู้ติดต่อ Gmail
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีสร้างผู้ติดต่อบน Gmail ใน Java
OAuthUser user = new OAuthUser();
// ตั้งค่ารหัสไคลเอนต์, ไคลเอ็นต์ซีเคร็ต และอีเมล
user.clientId = "<<clientID>>";
user.clientSecret = "<<clientSecret>>";
user.email = "<<email>>";
// คุณต้องดึง AuthorizationCode ด้วยตนเองด้วย AuthorizationCodeUrl ที่สร้างขึ้น
// กำหนดรหัสการให้สิทธิ์
String authorizationCode = "<<authCode>>";
// คัดลอก Code Verifier จากเอาต์พุตขั้นตอนก่อนหน้า
// ตั้งรหัสVerifier
String codeVerifier = "<<codeVerifier>>";
// รับโทเค็นการรีเฟรช
String refreshToken = GoogleOAuthHelper.getAccessTokenByAuthCode(authorizationCode, codeVerifier, user);
user.refreshToken = refreshToken;
// รับโทเค็นการเข้าถึง
String accessToken = GoogleOAuthHelper.getAccessTokenByRefreshToken(user);
// ใช้โทเค็นการเข้าถึงใน API
IGmailClient client = GmailClient.getInstance(accessToken, user.email);
// สร้างผู้ติดต่อ
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");
// กำหนดที่อยู่ทางไปรษณีย์
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);
// ตั้งหมายเลขโทรศัพท์
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);
// กำหนดรายละเอียดอื่นๆ
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");
// ตั้งค่าที่อยู่อีเมล
EmailAddress eAddress = new EmailAddress();
eAddress.setAddress("email@gmail.com");
contact.getEmailAddresses().add(eAddress);
// สร้างการติดต่อ
String contactUri = client.createContact(contact);
อัปเดตผู้ติดต่อบน Gmail ใน Java
คุณยังสามารถอัปเดตรายละเอียดของผู้ติดต่อ Gmail หลังจากเข้าถึงได้ ต่อไปนี้เป็นขั้นตอนในการอัปเดตผู้ติดต่อในบัญชี Gmail ใน Java
- ขั้นแรก สร้างผู้ใช้ Google รับโทเค็นการเข้าถึง และเริ่มต้นวัตถุ IGmailClient
- จากนั้น รับผู้ติดต่อในอาร์เรย์โดยใช้เมธอด IGmailClient.getAllContacts()
- หลังจากนั้น เรียกข้อมูลผู้ติดต่อที่ต้องการจากอาร์เรย์ในวัตถุ Contact
- สุดท้าย อัปเดตรายละเอียดของผู้ติดต่อและโทรหาเมธอด IGmailClient.updateContact(contact)
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีอัปเดตผู้ติดต่อใน Gmail ใน Java
OAuthUser user = new OAuthUser();
// ตั้งค่ารหัสไคลเอนต์, ไคลเอ็นต์ซีเคร็ต และอีเมล
user.clientId = "<<clientID>>";
user.clientSecret = "<<clientSecret>>";
user.email = "<<email>>";
// คุณต้องดึง AuthorizationCode ด้วยตนเองด้วย AuthorizationCodeUrl ที่สร้างขึ้น
// ตั้งรหัสการให้สิทธิ์
String authorizationCode = "<<authCode>>";
// คัดลอก Code Verifier จากเอาต์พุตขั้นตอนก่อนหน้า
// ตั้งรหัสVerifier
String codeVerifier = "<<codeVerifier>>";
// รับโทเค็นการรีเฟรช
String refreshToken = GoogleOAuthHelper.getAccessTokenByAuthCode(authorizationCode, codeVerifier, user);
user.refreshToken = refreshToken;
// รับโทเค็นการเข้าถึง
String accessToken = GoogleOAuthHelper.getAccessTokenByRefreshToken(user);
// ใช้โทเค็นการเข้าถึงใน API
IGmailClient client = GmailClient.getInstance(accessToken, user.email);
// รับรายชื่อทั้งหมด
Contact[] contacts = client.getAllContacts();
// ต้องการดึงข้อมูลหนึ่งรายการ
Contact contact = contacts[0];
contact.setJobTitle("Manager IT");
contact.setDepartmentName("Customer Support");
contact.setCompanyName("Aspose");
contact.setProfession("Software Developer");
// อัพเดทรายชื่อติดต่อ
client.updateContact(contact);
ลบผู้ติดต่อใน Gmail ใน Java
สุดท้าย เรามาดูวิธีลบผู้ติดต่อ Gmail โดยใช้ Java ต่อไปนี้เป็นขั้นตอนในการดำเนินการนี้
- ขั้นแรก สร้างผู้ใช้ Google รับโทเค็นการเข้าถึง และเริ่มต้นวัตถุ IGmailClient
- จากนั้น รับผู้ติดต่อในอาร์เรย์โดยใช้เมธอด IGmailClient.getAllContacts()
- กรองผู้ติดต่อที่ต้องการจากอาร์เรย์ในวัตถุ Contact
- สุดท้าย เรียกเมธอด IGmailClient.deleteContact(Contact.Id.GoogleId) เพื่อลบผู้ติดต่อ
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการลบผู้ติดต่อใน Gmail ใน Java
OAuthUser user = new OAuthUser();
// ตั้งค่ารหัสไคลเอนต์, ไคลเอ็นต์ซีเคร็ต และอีเมล
user.clientId = "<<clientID>>";
user.clientSecret = "<<clientSecret>>";
user.email = "<<email>>";
// คุณต้องดึง AuthorizationCode ด้วยตนเองด้วย AuthorizationCodeUrl ที่สร้างขึ้น
// กำหนดรหัสการให้สิทธิ์
String authorizationCode = "<<authCode>>";
// คัดลอก Code Verifier จากเอาต์พุตขั้นตอนก่อนหน้า
// ตั้งรหัสVerifier
String codeVerifier = "<<codeVerifier>>";
// รับโทเค็นการรีเฟรช
String refreshToken = GoogleOAuthHelper.getAccessTokenByAuthCode(authorizationCode, codeVerifier, user);
user.refreshToken = refreshToken;
// รับโทเค็นการเข้าถึง
String accessToken = GoogleOAuthHelper.getAccessTokenByRefreshToken(user);
// ใช้โทเค็นการเข้าถึงใน API
IGmailClient client = GmailClient.getInstance(accessToken, user.email);
// รับรายชื่อทั้งหมด
Contact[] contacts = client.getAllContacts();
// ต้องการดึงข้อมูลหนึ่งรายการ
Contact contact = contacts[0];
// ลบผู้ติดต่อ
client.deleteContact(contact.getId().getGoogleId());
รับใบอนุญาต API ฟรี
คุณสามารถใช้ Aspose.Email for Java ได้โดยไม่มีข้อจำกัดในการประเมินโดยใช้ ใบอนุญาตชั่วคราวฟรี
บทสรุป
ในบทความนี้ คุณได้เรียนรู้วิธีสร้างและอัปเดตผู้ติดต่อในบัญชี Gmail ใน Java นอกจากนี้ คุณได้เห็นวิธีการลบผู้ติดต่อ Gmail โดยทางโปรแกรม นอกจากนี้ คุณสามารถไปที่ เอกสารประกอบ เพื่อสำรวจคุณสมบัติอื่นๆ ของ Aspose.Email for Java ในกรณีที่คุณมีคำถาม คุณสามารถโพสต์ได้ที่ ฟอรัม ของเรา