ایجاد، به روز رسانی و حذف مخاطبین در Gmail با استفاده از جاوا

Gmail یکی از برنامه های کاربردی آنلاین است که معمولا برای ارسال و دریافت ایمیل استفاده می شود. علاوه بر این، امکان کار با تقویم ها، مخاطبین، چت ها و غیره را فراهم می کند و خدمات مختلف همکاری دیگر را ارائه می دهد. اخیراً، در مقاله ای، نحوه وارد کردن مخاطبین از حساب جیمیل را توضیح داده ایم. امروز، نحوه ایجاد، به روز رسانی و حذف مخاطبین در حساب جیمیل با استفاده از جاوا را خواهید آموخت.

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، باید یک پروژه در کنسول توسعه دهنده گوگل ایجاد کنید که به شما امکان می دهد با جیمیل ارتباط برقرار کنید. برای ایجاد یکی، می توانید [این راهنما] را دنبال کنید.

اکنون یک کلاس کمکی به نام GoogleOAuthHelper ایجاد کنید تا از احراز هویت یک حساب جیمیل مراقبت کند. همچنین یک کلاس با نام 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();
    }
}

یک مخاطب در جیمیل در جاوا ایجاد کنید

در زیر مراحل ایجاد یک مخاطب در جیمیل در جاوا آمده است.

  • ابتدا یک کاربر Google ایجاد کنید، یک نشانه دسترسی دریافت کنید و یک شی IGmailClient را مقداردهی اولیه کنید.
  • سپس، یک شی از کلاس Contact ایجاد کنید.
  • ویژگی های مخاطب مانند نام، پیشوند، حرفه و غیره را تنظیم کنید.
  • برای تنظیم آدرس پستی، نمونه ای از PostalAddress ایجاد کنید و ویژگی های آن را تنظیم کنید.
  • آدرس جدید ایجاد شده را با استفاده از روش Contact.getPhysicalAddresses().add(PostalAddress) به مجموعه اضافه کنید.
  • جزئیات شماره تلفن را با استفاده از کلاس PhoneNumber تنظیم کنید.
  • جزئیات شماره تلفن را با استفاده از روش Contact.getPhoneNumbers().add(PhoneNumber) به مجموعه اضافه کنید.
  • یک نمونه از کلاس EmailAddress ایجاد کنید، آدرس ایمیل را تنظیم کنید و آن را به مخاطب اختصاص دهید.
  • در نهایت، روش IGmailClient.createContact(Contact) را برای ایجاد مخاطب Gmail فراخوانی کنید.

نمونه کد زیر نحوه ایجاد مخاطب در جیمیل در جاوا را نشان می دهد.

OAuthUser user = new OAuthUser();

// clientId، clientSecret و email را تنظیم کنید 
user.clientId = "<<clientID>>"; 
user.clientSecret = "<<clientSecret>>"; 
user.email = "<<email>>";

// شما باید AuthorizationCode را به صورت دستی با AuthorizationCodeUrl ایجاد شده بازیابی کنید
// تنظیم کد مجوز
String authorizationCode = "<<authCode>>";

// کد تأیید کننده را از خروجی مرحله قبل کپی کنید
// 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);

یک مخاطب را در جیمیل در جاوا به روز کنید

شما همچنین می توانید جزئیات یک مخاطب جیمیل را پس از دسترسی به آن به روز کنید. مراحل زیر برای به روز رسانی یک مخاطب در یک حساب جیمیل در جاوا آمده است.

  • ابتدا یک کاربر Google ایجاد کنید، یک نشانه دسترسی دریافت کنید و یک شی IGmailClient را مقداردهی اولیه کنید.
  • سپس، مخاطبین را در یک آرایه با استفاده از روش IGmailClient.getAllContacts() دریافت کنید.
  • پس از آن، مخاطب مورد نیاز را از آرایه در یک شی Contact واکشی کنید.
  • در نهایت، جزئیات تماس را به روز کنید و با روش IGmailClient.updateContact(contact) تماس بگیرید.

نمونه کد زیر نحوه به روز رسانی یک مخاطب را در جیمیل در جاوا نشان می دهد.

OAuthUser user = new OAuthUser();

// clientId، clientSecret و email را تنظیم کنید 
user.clientId = "<<clientID>>"; 
user.clientSecret = "<<clientSecret>>"; 
user.email = "<<email>>";

// شما باید AuthorizationCode را به صورت دستی با AuthorizationCodeUrl ایجاد شده بازیابی کنید
// تنظیم کد مجوز
String authorizationCode = "<<authCode>>";

// کد تأیید کننده را از خروجی مرحله قبل کپی کنید
// 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);

مخاطب را در جیمیل در جاوا حذف کنید

در نهایت، بیایید ببینیم که چگونه یک مخاطب جیمیل را با استفاده از جاوا حذف کنیم. مراحل زیر برای انجام این عملیات آورده شده است.

  • ابتدا یک کاربر Google ایجاد کنید، یک نشانه دسترسی دریافت کنید و یک شی IGmailClient را مقداردهی اولیه کنید.
  • سپس، مخاطبین را در یک آرایه با استفاده از روش IGmailClient.getAllContacts() دریافت کنید.
  • مخاطب مورد نظر را از آرایه در یک شی Contact فیلتر کنید.
  • در نهایت، با روش IGmailClient.deleteContact(Contact.Id.GoogleId) تماس بگیرید تا مخاطب را حذف کنید.

نمونه کد زیر نحوه حذف یک مخاطب در جیمیل در جاوا را نشان می دهد.

OAuthUser user = new OAuthUser();

// clientId، clientSecret و email را تنظیم کنید 
user.clientId = "<<clientID>>"; 
user.clientSecret = "<<clientSecret>>"; 
user.email = "<<email>>";

// شما باید AuthorizationCode را به صورت دستی با AuthorizationCodeUrl ایجاد شده بازیابی کنید
// تنظیم کد مجوز
String authorizationCode = "<<authCode>>";

// کد تأیید کننده را از خروجی مرحله قبل کپی کنید
// 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 برای جاوا بدون محدودیت ارزیابی با استفاده از مجوز موقت رایگان استفاده کنید.

نتیجه

در این مقاله با نحوه ایجاد و به روز رسانی مخاطبین در اکانت جیمیل در جاوا آشنا شده اید. علاوه بر این، نحوه حذف یک مخاطب جیمیل را به صورت برنامه‌ریزی مشاهده کرده‌اید. علاوه بر این، می‌توانید برای بررسی سایر ویژگی‌های Aspose.Email برای جاوا از مستندات دیدن کنید. در صورت داشتن هرگونه سوال، می توانید در [تالار گفتمان24 ما ارسال کنید.

همچنین ببینید