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 Yönetmek için Java API
- Gmail’de Kişi Oluşturma
- Gmail’de bir Kişiyi Güncelleme
- Gmail’de bir Kişiyi Silme
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.
- Öncelikle, bir Google kullanıcısı oluşturun, bir erişim belirteci alın ve bir IGmailClient nesnesi başlatın.
- Ardından, Contact sınıfından bir nesne oluşturun.
- Kişinin ad, ön ek, meslek vb. gibi özelliklerini ayarlayın.
- Posta adresini ayarlamak için bir PostalAddress örneği oluşturun ve özelliklerini ayarlayın.
- Contact.getPhysicalAddresses().add(PostalAddress) yöntemini kullanarak koleksiyona yeni oluşturulan adresi ekleyin.
- PhoneNumber sınıfını kullanarak telefon numarası ayrıntılarını ayarlayın.
- Contact.getPhoneNumbers().add(PhoneNumber) yöntemini kullanarak koleksiyona telefon numarası ayrıntılarını ekleyin.
- EmailAddress sınıfının bir örneğini oluşturun, e-posta adresini ayarlayın ve kişiye atayın.
- Son olarak, Gmail kişisi oluşturmak için IGmailClient.createContact(Contact) yöntemini çağırın.
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.
- Öncelikle, bir Google kullanıcısı oluşturun, bir erişim belirteci alın ve bir IGmailClient nesnesi başlatın.
- Ardından, IGmailClient.getAllContacts() yöntemini kullanarak bir dizideki kişileri alın.
- Bundan sonra, bir Kişi nesnesindeki diziden gerekli kişiyi getirin.
- Son olarak, iletişim bilgilerini güncelleyin ve IGmailClient.updateContact(contact) yöntemini çağırın.
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.
- Öncelikle, bir Google kullanıcısı oluşturun, bir erişim belirteci alın ve bir IGmailClient nesnesi başlatın.
- Ardından, IGmailClient.getAllContacts() yöntemini kullanarak bir dizideki kişileri alın.
- Bir Kişi nesnesindeki diziden istenen kişiyi filtreleyin.
- Son olarak, kişiyi silmek için IGmailClient.deleteContact(Contact.Id.GoogleId) yöntemini çağırın.
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.