Créer, mettre à jour et supprimer des contacts dans Gmail à l'aide de Java

Gmail est l’une des applications en ligne les plus utilisées pour envoyer et recevoir des e-mails. De plus, il permet de travailler avec des calendriers, des contacts, des chats, etc., et fournit divers autres services de collaboration. Récemment, dans un article, nous avons expliqué comment importer des contacts depuis un compte Gmail. Aujourd’hui, vous apprendrez à créer, mettre à jour et supprimer des contacts dans un compte Gmail à l’aide de Java.

API Java pour créer, mettre à jour et supprimer des contacts Gmail

Pour créer et manipuler des contacts dans un compte Gmail, nous utiliserons Aspose.Email for Java. Il s’agit d’une API riche en fonctionnalités qui vous permet de créer et d’envoyer des e-mails et de travailler avec des clients de messagerie populaires. Vous pouvez soit télécharger l’API ou l’installer à l’aide des configurations Maven suivantes.

Repository:

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

Dependency:

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

Après avoir installé l’API, vous devez créer un projet sur la Google Developer Console, qui vous permettra de communiquer avec Gmail. Pour en créer un, vous pouvez suivre ce guide.

Maintenant, créez une classe d’assistance nommée GoogleOAuthHelper pour prendre en charge l’authentification d’un compte Gmail. Créez également une classe nommée OAuthUser pour stocker les informations utilisateur. Ce qui suit est l’implémentation complète des deux classes.

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>
 * Console développeurs https://console.developers.google.com/projectselector/apis/credentials?pli=1 
 * Documentation 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) {
            // ignorer
        }
        return result.toString();
    }
}

Créer un contact sur Gmail en Java

Voici les étapes pour créer un contact sur Gmail en Java.

  • Commencez par créer un utilisateur Google, obtenez un jeton d’accès et initialisez un objet IGmailClient.
  • Créez ensuite un objet de la classe Contact.
  • Définissez les propriétés du contact telles que le nom, le préfixe, la profession, etc.
  • Pour définir l’adresse postale, créez une instance de PostalAddress et définissez ses propriétés.
  • Ajoutez l’adresse nouvellement créée à la collection à l’aide de la méthode Contact.getPhysicalAddresses().add(PostalAddress).
  • Définissez les détails du numéro de téléphone à l’aide de la classe PhoneNumber.
  • Ajoutez les détails du numéro de téléphone à la collecte à l’aide de la méthode Contact.getPhoneNumbers().add(PhoneNumber).
  • Créez une instance de la classe EmailAddress, définissez l’adresse e-mail et attribuez-la au contact.
  • Enfin, appelez la méthode IGmailClient.createContact(Contact) pour créer un contact Gmail.

L’exemple de code suivant montre comment créer un contact sur Gmail en Java.

OAuthUser user = new OAuthUser();

// Définissez clientId, clientSecret et email 
user.clientId = "<<clientID>>"; 
user.clientSecret = "<<clientSecret>>"; 
user.email = "<<email>>";

// Vous devez récupérer AuthorizationCode manuellement avec AuthorizationCodeUrl généré
// Définir le code d'autorisation
String authorizationCode = "<<authCode>>";

// Copier le vérificateur de code à partir de la sortie de l'étape précédente
// Définir le codeVérificateur
String codeVerifier = "<<codeVerifier>>";

// Obtenir un jeton d'actualisation
String refreshToken = GoogleOAuthHelper.getAccessTokenByAuthCode(authorizationCode, codeVerifier, user);
user.refreshToken = refreshToken;

// Obtenir un jeton d'accès
String accessToken = GoogleOAuthHelper.getAccessTokenByRefreshToken(user);

// Utiliser le jeton d'accès dans l'API
IGmailClient client = GmailClient.getInstance(accessToken, user.email);

// Créer un contact
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");

// Définir l'adresse postale
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);

// Définir le numéro de téléphone
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);

// Définir d'autres détails
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");

// Définir l'adresse e-mail
EmailAddress eAddress = new EmailAddress();
eAddress.setAddress("email@gmail.com");
contact.getEmailAddresses().add(eAddress);

// Créer un contact 
String contactUri = client.createContact(contact);

Mettre à jour un contact sur Gmail en Java

Vous pouvez également mettre à jour les détails d’un contact Gmail après y avoir accédé. Voici les étapes pour mettre à jour un contact dans un compte Gmail en Java.

L’exemple de code suivant montre comment mettre à jour un contact dans Gmail en Java.

OAuthUser user = new OAuthUser();

// Définissez clientId, clientSecret et email 
user.clientId = "<<clientID>>"; 
user.clientSecret = "<<clientSecret>>"; 
user.email = "<<email>>";

// Vous devez récupérer AuthorizationCode manuellement avec AuthorizationCodeUrl généré
// Définir le code d'autorisation
String authorizationCode = "<<authCode>>";

// Copier le vérificateur de code à partir de la sortie de l'étape précédente
// Définir le codeVérificateur
String codeVerifier = "<<codeVerifier>>";

// Obtenir un jeton d'actualisation
String refreshToken = GoogleOAuthHelper.getAccessTokenByAuthCode(authorizationCode, codeVerifier, user);
user.refreshToken = refreshToken;

// Obtenir un jeton d'accès
String accessToken = GoogleOAuthHelper.getAccessTokenByRefreshToken(user);

// Utiliser le jeton d'accès dans l'API
IGmailClient client = GmailClient.getInstance(accessToken, user.email);

// Obtenir tous les contacts
Contact[] contacts = client.getAllContacts();

// Récupérer un requis
Contact contact = contacts[0];
contact.setJobTitle("Manager IT");
contact.setDepartmentName("Customer Support");
contact.setCompanyName("Aspose");
contact.setProfession("Software Developer");

// Mettre à jour le contact
client.updateContact(contact);

Supprimer un contact sur Gmail en Java

Enfin, voyons comment supprimer un contact Gmail à l’aide de Java. Voici les étapes pour effectuer cette opération.

L’exemple de code suivant montre comment supprimer un contact sur Gmail en Java.

OAuthUser user = new OAuthUser();

// Définissez clientId, clientSecret et email 
user.clientId = "<<clientID>>"; 
user.clientSecret = "<<clientSecret>>"; 
user.email = "<<email>>";

// Vous devez récupérer AuthorizationCode manuellement avec AuthorizationCodeUrl généré
// Définir le code d'autorisation
String authorizationCode = "<<authCode>>";

// Copier le vérificateur de code à partir de la sortie de l'étape précédente
// Définir le codeVérificateur
String codeVerifier = "<<codeVerifier>>";

// Obtenir un jeton d'actualisation
String refreshToken = GoogleOAuthHelper.getAccessTokenByAuthCode(authorizationCode, codeVerifier, user);
user.refreshToken = refreshToken;

// Obtenir un jeton d'accès
String accessToken = GoogleOAuthHelper.getAccessTokenByRefreshToken(user);

// Utiliser le jeton d'accès dans l'API
IGmailClient client = GmailClient.getInstance(accessToken, user.email);

// Obtenir tous les contacts
Contact[] contacts = client.getAllContacts();

// Récupérer un requis
Contact contact = contacts[0];

// Supprimer le contact
client.deleteContact(contact.getId().getGoogleId());

Obtenez une licence API gratuite

Vous pouvez utiliser Aspose.Email for Java sans limitations d’évaluation à l’aide d’une licence temporaire gratuite.

Conclusion

Dans cet article, vous avez appris à créer et à mettre à jour des contacts dans un compte Gmail en Java. De plus, vous avez vu comment supprimer un contact Gmail par programmation. En outre, vous pouvez visiter la documentation pour explorer d’autres fonctionnalités d’Aspose.Email for Java. Au cas où vous auriez des questions, vous pouvez poster sur notre forum.

Voir également