Java kullanarak Gmail'de Kişi Oluşturma, Güncelleme ve Silme

Gmail, e-posta göndermek ve almak için yaygın olarak kullanılan çevrimiçi uygulamalardan biridir. Ayrıca takvimler, kişiler, sohbetler vb. ile çalışmaya izin verir ve çeşitli başka işbirliği hizmetleri sağlar. Yakın zamanda bir makalede, bir Gmail hesabından kişilerin nasıl içe aktarılacağını ele aldık. Bugün, Java kullanarak bir Gmail hesabında kişileri nasıl oluşturacağınızı, güncelleyeceğinizi ve sileceğinizi öğreneceksiniz.

Gmail Kişilerini Oluşturmak, Güncellemek ve Silmek için Java API

Bir Gmail hesabında kişiler oluşturmak ve bunları değiştirmek için Aspose.Email for Java kullanacağız. E-posta oluşturup göndermenize ve popüler e-posta istemcileriyle çalışmanıza olanak tanıyan, zengin özelliklere sahip bir API’dir. API’yi indirebilir veya aşağıdaki Maven yapılandırmalarını kullanarak yükleyebilirsiniz.

Depo:

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>http://repository.aspose.com/repo/</url>
</repository>

Bağımlılık:

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-email</artifactId>
    <version>22.3</version>
    <classifier>jdk16</classifier>
</dependency>

API’yi kurduktan sonra Google Developer Console üzerinde Gmail ile iletişim kurmanızı sağlayacak bir proje oluşturmanız gerekmektedir. Bir tane oluşturmak için [bu kılavuzu] takip edebilirsiniz]5.

Şimdi, bir Gmail hesabının kimlik doğrulamasıyla ilgilenmek için GoogleOAuthHelper adlı bir yardımcı sınıf oluşturun. Ayrıca, kullanıcı bilgilerini depolamak için OAuthUser adlı bir sınıf oluşturun. Aşağıdakiler, her iki sınıfın da tam uygulamasıdır.

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>
 * Geliştirici konsolu https://console.developers.google.com/projectselector/apis/credentials?pli=1 
 * Belgeler 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) {
            // aldırmamak
        }
        return result.toString();
    }
}

Java’da Gmail’de Kişi Oluşturma

Java’da Gmail’de bir kişi oluşturma adımları aşağıdadır.

Aşağıdaki kod örneği, Java’da Gmail’de nasıl kişi oluşturulacağını gösterir.

OAuthUser user = new OAuthUser();

// clientId, clientSecret ve e-postayı ayarlayın 
user.clientId = "<<clientID>>"; 
user.clientSecret = "<<clientSecret>>"; 
user.email = "<<email>>";

// AuthorizationCode'u, oluşturulan AuthorizationCodeUrl ile manuel olarak almanız gerekir.
// Yetkilendirme kodunu ayarla
String authorizationCode = "<<authCode>>";

// Kod Doğrulayıcıyı önceki adım çıktısından kopyala
// codeVerifier'ı ayarla
String codeVerifier = "<<codeVerifier>>";

// Yenileme Simgesini Alın
String refreshToken = GoogleOAuthHelper.getAccessTokenByAuthCode(authorizationCode, codeVerifier, user);
user.refreshToken = refreshToken;

// Erişim izni almak
String accessToken = GoogleOAuthHelper.getAccessTokenByRefreshToken(user);

// API'de Erişim Simgesini Kullanın
IGmailClient client = GmailClient.getInstance(accessToken, user.email);

// Bir Kişi Oluştur
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");

// Posta adresini ayarla
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);

// Telefon numarası ayarla
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);

// Diğer ayrıntıları ayarla
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");

// E-posta adresi ayarla
EmailAddress eAddress = new EmailAddress();
eAddress.setAddress("email@gmail.com");
contact.getEmailAddresses().add(eAddress);

// Temas kurmak 
String contactUri = client.createContact(contact);

Java’da Gmail’de bir Kişiyi Güncelleyin

Bir Gmail kişisine eriştikten sonra onun ayrıntılarını da güncelleyebilirsiniz. Aşağıda, Java’da bir Gmail hesabındaki bir kişiyi güncelleme adımları yer almaktadır.

Aşağıdaki kod örneği, Java’da Gmail’de bir kişinin nasıl güncelleneceğini gösterir.

OAuthUser user = new OAuthUser();

// clientId, clientSecret ve e-postayı ayarlayın 
user.clientId = "<<clientID>>"; 
user.clientSecret = "<<clientSecret>>"; 
user.email = "<<email>>";

// AuthorizationCode'u, oluşturulan AuthorizationCodeUrl ile manuel olarak almanız gerekir.
// Yetkilendirme kodunu ayarla
String authorizationCode = "<<authCode>>";

// Kod Doğrulayıcıyı önceki adım çıktısından kopyala
// codeVerifier'ı ayarla
String codeVerifier = "<<codeVerifier>>";

// Yenileme Simgesini Alın
String refreshToken = GoogleOAuthHelper.getAccessTokenByAuthCode(authorizationCode, codeVerifier, user);
user.refreshToken = refreshToken;

// Erişim izni almak
String accessToken = GoogleOAuthHelper.getAccessTokenByRefreshToken(user);

// API'de Erişim Simgesini Kullanın
IGmailClient client = GmailClient.getInstance(accessToken, user.email);

// Tüm kişileri al
Contact[] contacts = client.getAllContacts();

// Gerekli olanı getir
Contact contact = contacts[0];
contact.setJobTitle("Manager IT");
contact.setDepartmentName("Customer Support");
contact.setCompanyName("Aspose");
contact.setProfession("Software Developer");

// Kişiyi güncelle
client.updateContact(contact);

Java’da Gmail’de Bir Kişiyi Silme

Son olarak, Java kullanarak bir Gmail kişisinin nasıl silineceğini görelim. Bu işlemi gerçekleştirmek için adımlar aşağıdadır.

Aşağıdaki kod örneği, Java’da Gmail’de bir kişinin nasıl silineceğini gösterir.

OAuthUser user = new OAuthUser();

// clientId, clientSecret ve e-postayı ayarlayın 
user.clientId = "<<clientID>>"; 
user.clientSecret = "<<clientSecret>>"; 
user.email = "<<email>>";

// AuthorizationCode'u, oluşturulan AuthorizationCodeUrl ile manuel olarak almanız gerekir.
// Yetkilendirme kodunu ayarla
String authorizationCode = "<<authCode>>";

// Kod Doğrulayıcıyı önceki adım çıktısından kopyala
// codeVerifier'ı ayarla
String codeVerifier = "<<codeVerifier>>";

// Yenileme Simgesini Alın
String refreshToken = GoogleOAuthHelper.getAccessTokenByAuthCode(authorizationCode, codeVerifier, user);
user.refreshToken = refreshToken;

// Erişim izni almak
String accessToken = GoogleOAuthHelper.getAccessTokenByRefreshToken(user);

// API'de Erişim Simgesini Kullanın
IGmailClient client = GmailClient.getInstance(accessToken, user.email);

// Tüm kişileri al
Contact[] contacts = client.getAllContacts();

// Gerekli olanı getir
Contact contact = contacts[0];

// Kişiyi silmek
client.deleteContact(contact.getId().getGoogleId());

Ücretsiz API Lisansı Alın

Aspose.Email for Java’yı ücretsiz geçici lisans kullanarak değerlendirme sınırlamaları olmaksızın kullanabilirsiniz.

Çözüm

Bu makalede, Java’da bir Gmail hesabında kişileri nasıl oluşturacağınızı ve güncelleyeceğinizi öğrendiniz. Ayrıca, bir Gmail kişisini programlı olarak nasıl sileceğinizi gördünüz. Ayrıca Aspose.Email for Java’nın diğer özelliklerini keşfetmek için belgeleri ziyaret edebilirsiniz. Herhangi bir sorunuz olursa forumumuza mesaj gönderebilirsiniz.

Ayrıca bakınız