قم بإنشاء وتحديث وحذف جهات الاتصال في Gmail باستخدام Java

يعد Gmail أحد التطبيقات الشائعة الاستخدام عبر الإنترنت لإرسال رسائل البريد الإلكتروني واستلامها. بالإضافة إلى ذلك ، فإنه يسمح بالعمل مع التقويمات وجهات الاتصال والمحادثات وما إلى ذلك ، ويوفر العديد من خدمات التعاون الأخرى. مؤخرًا ، في مقال ، تناولنا كيفية استيراد جهات الاتصال من حساب Gmail. اليوم ، سوف تتعلم كيفية إنشاء وتحديث وحذف جهات الاتصال في حساب Gmail باستخدام Java.

Java API لإنشاء وتحديث وحذف جهات اتصال Gmail

لإنشاء جهات اتصال ومعالجتها في حساب Gmail ، سنستخدم Aspose.Email for Java. إنها واجهة برمجة تطبيقات غنية بالميزات تتيح لك إنشاء وإرسال رسائل البريد الإلكتروني والعمل مع عملاء البريد الإلكتروني المشهورين. يمكنك إما تنزيل 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.

  • أولاً ، قم بإنشاء مستخدم Google ، واحصل على رمز وصول ، وقم بتهيئة كائن IGmailClient.
  • ثم قم بإنشاء كائن من فئة جهة الاتصال.
  • قم بتعيين خصائص جهة الاتصال مثل الاسم والبادئة والمهنة وما إلى ذلك.
  • لتعيين العنوان البريدي ، أنشئ مثيلاً لـ PostalAddress وعيّن خصائصه.
  • أضف العنوان الذي تم إنشاؤه حديثًا إلى المجموعة باستخدام طريقة Contact.getPhysicalAddresses().add (PostalAddress).
  • قم بتعيين تفاصيل رقم الهاتف باستخدام فئة PhoneNumber.
  • أضف تفاصيل رقم الهاتف إلى المجموعة باستخدام طريقة Contact.getPhoneNumbers().add (PhoneNumber).
  • قم بإنشاء مثيل لفئة EmailAddress ، وقم بتعيين عنوان البريد الإلكتروني ، وقم بتعيينه لجهة الاتصال.
  • أخيرًا ، اتصل بأسلوب IGmailClient.createContact (جهة اتصال) لإنشاء جهة اتصال في 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>>";

// احصل على رمز التحديث
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 في جافا

يمكنك أيضًا تحديث تفاصيل جهة اتصال Gmail بعد الوصول إليها. فيما يلي الخطوات لتحديث جهة اتصال في حساب 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>>";

// احصل على رمز التحديث
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 في جافا

أخيرًا ، دعنا نرى كيفية حذف جهة اتصال 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>>";

// احصل على رمز التحديث
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 لجافا دون قيود تقييمية باستخدام رخصة مؤقتة مجانية.

استنتاج

في هذه المقالة ، تعلمت كيفية إنشاء وتحديث جهات الاتصال في حساب Gmail في Java. علاوة على ذلك ، لقد رأيت كيفية حذف جهة اتصال Gmail برمجيًا. بالإضافة إلى ذلك ، يمكنك زيارة التوثيق لاستكشاف الميزات الأخرى لبرنامج Aspose.Email لجافا. في حال كان لديك أي أسئلة ، يمكنك إرسالها إلى المنتدى.

أنظر أيضا