צור, עדכן ומחק אנשי קשר ב-Gmail באמצעות Java

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 style=";text-align:right;direction:rtl">
 * מסוף המפתחים 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.

  • ראשית, צור משתמש בגוגל, קבל אסימון גישה, ואתחל אובייקט IGmailClient.
  • לאחר מכן, צור אובייקט מהמחלקה Contact.
  • הגדר מאפיינים של איש הקשר כגון שם, קידומת, מקצוע וכו'.
  • כדי להגדיר את כתובת הדואר, צור מופע של PostalAddress והגדר את המאפיינים שלו.
  • הוסף כתובת חדשה שנוצרה לאוסף באמצעות השיטה Contact.getPhysicalAddresses().add(PostalAddress).
  • הגדר פרטי מספר טלפון באמצעות מחלקה PhoneNumber.
  • הוסף פרטי מספר טלפון לאוסף באמצעות שיטת Contact.getPhoneNumbers().add(PhoneNumber).
  • צור מופע של מחלקה EmailAddress, הגדר את כתובת הדוא"ל והקצה אותה לאיש הקשר.
  • לבסוף, התקשר לשיטת IGmailClient.createContact(Contact) כדי ליצור איש קשר ב-Gmail.

דוגמת הקוד הבאה מראה כיצד ליצור איש קשר ב-Gmail ב-Java.

OAuthUser user = new OAuthUser();

// הגדר ClientId, ClientSecret ואימייל 
user.clientId = "<<clientID>>"; 
user.clientSecret = "<<clientSecret>>"; 
user.email = "<<email>>";

// עליך לאחזר את AuthorizationCode באופן ידני באמצעות AuthorizationCodeUrl שנוצר
// הגדר קוד הרשאה
String authorizationCode = "<<authCode>>";

// העתק את Code Verifier מפלט השלב הקודם
// הגדר codeVerifier
String codeVerifier = "<<codeVerifier>>";

// קבל Refresh Token
String refreshToken = GoogleOAuthHelper.getAccessTokenByAuthCode(authorizationCode, codeVerifier, user);
user.refreshToken = refreshToken;

// קבל אסימון גישה
String accessToken = GoogleOAuthHelper.getAccessTokenByRefreshToken(user);

// השתמש ב-Access Token ב-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.

  • ראשית, צור משתמש בגוגל, קבל אסימון גישה, ואתחל אובייקט IGmailClient.
  • לאחר מכן, קבל אנשי קשר במערך באמצעות שיטת IGmailClient.getAllContacts().
  • לאחר מכן, אחזר את איש הקשר הנדרש מהמערך באובייקט Contact.
  • לבסוף, עדכן את פרטי איש הקשר והתקשר לשיטת IGmailClient.updateContact(contact).

דוגמת הקוד הבאה מראה כיצד לעדכן איש קשר ב-Gmail ב-Java.

OAuthUser user = new OAuthUser();

// הגדר ClientId, ClientSecret ואימייל 
user.clientId = "<<clientID>>"; 
user.clientSecret = "<<clientSecret>>"; 
user.email = "<<email>>";

// עליך לאחזר את AuthorizationCode באופן ידני באמצעות AuthorizationCodeUrl שנוצר
// הגדר קוד הרשאה
String authorizationCode = "<<authCode>>";

// העתק את Code Verifier מפלט השלב הקודם
// הגדר codeVerifier
String codeVerifier = "<<codeVerifier>>";

// קבל Refresh Token
String refreshToken = GoogleOAuthHelper.getAccessTokenByAuthCode(authorizationCode, codeVerifier, user);
user.refreshToken = refreshToken;

// קבל אסימון גישה
String accessToken = GoogleOAuthHelper.getAccessTokenByRefreshToken(user);

// השתמש ב-Access Token ב-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. להלן השלבים לביצוע פעולה זו.

דוגמת הקוד הבאה מראה כיצד למחוק איש קשר ב-Gmail ב-Java.

OAuthUser user = new OAuthUser();

// הגדר ClientId, ClientSecret ואימייל 
user.clientId = "<<clientID>>"; 
user.clientSecret = "<<clientSecret>>"; 
user.email = "<<email>>";

// עליך לאחזר את AuthorizationCode באופן ידני באמצעות AuthorizationCodeUrl שנוצר
// הגדר קוד הרשאה
String authorizationCode = "<<authCode>>";

// העתק את Code Verifier מפלט השלב הקודם
// הגדר codeVerifier
String codeVerifier = "<<codeVerifier>>";

// קבל Refresh Token
String refreshToken = GoogleOAuthHelper.getAccessTokenByAuthCode(authorizationCode, codeVerifier, user);
user.refreshToken = refreshToken;

// קבל אסימון גישה
String accessToken = GoogleOAuthHelper.getAccessTokenByRefreshToken(user);

// השתמש ב-Access Token ב-API
IGmailClient client = GmailClient.getInstance(accessToken, user.email);

// קבל את כל אנשי הקשר
Contact[] contacts = client.getAllContacts();

// אחזור נדרש אחד
Contact contact = contacts[0];

// תמחק קשר
client.deleteContact(contact.getId().getGoogleId());

קבל רישיון API בחינם

אתה יכול להשתמש ב-Aspose.Email עבור Java ללא מגבלות הערכה באמצעות רישיון זמני ללא תשלום.

סיכום

במאמר זה, למדת כיצד ליצור ולעדכן אנשי קשר בחשבון Gmail ב-Java. יתר על כן, ראית כיצד למחוק איש קשר ב-Gmail באופן פרוגרמטי. חוץ מזה, אתה יכול לבקר בתיעוד כדי לחקור תכונות אחרות של Aspose.Email עבור Java. למקרה שיש לך שאלות כלשהן, אתה יכול לכתוב בפורום שלנו.

ראה גם