일리노이주 리얼 아이디 신청 타임라인 공유 (2022년 8월)

코로나 이후 미국내 DMV 사무국도 많은 변화가 있었다. 이사를 한후 운전면허증, 아이디 등 주소변경을 위해서는 가까운 DMV 를 방문해야만 했다.

특히, 팬더믹 이후 DMV 빌딩내에 입실하는 방문객수를 제한하면서 빌딩 밖으로 끝없는 줄이 이어지는 등 문제가 많았다.

이제는 DMV 업무도 간편해졌다. 유효기간 만료로 인한 운전면허증이나 아이디 리뉴, 주소변경 등 간단한 업무는 온라인으로 가능해졌기 때문이다.

유효기간 만료되기 몇달전에 집으로 리뉴 관련 편지를 받게 된다. 그 편지에 온라인 서비스를 위한 PIN 넘버 혹은 Renewal Authorization Number 를 찾아볼수 있다.

만일 기존 운전면허증이 아닌 리얼아이디를 신청하고자 한다면 이것은 온라인으로 불가능하고 직접 DMV를 방문하여 신청해야 한다. 리얼 아이디 시행일이 코로나로 인해 계속 연기되면서 현재 정해진 날자는 2023년 5월 3일이다. 단, 그 시기가 다가오면서 많은 신청자가 몰리는 것을 피하기 위해서는 만료일이 다가오는 경우 리얼 아이디로 바로 신청하는 것이 좋을 듯 하다.

You DO NOT NEED a REAL ID if:

  • You have a valid U.S. passport or passport card; or
  • You do not use airplanes as a mode of domestic transportation; or
  • You do not visit military bases; or
  • You do not visit secure federal facilities.

You NEED a REAL ID if:

  • You do not have a valid U.S. passport or passport card; AND
  • You use airplanes as a mode of domestic transportation; or
  • You visit military bases; or
  • You visit secure federal facilities.

일리노이주에서 리얼 아이디를 신청해서 수령하기까지 타임라인은 아래와 같다.

  1. 가까운 DMV 를 찾는다. Appointment Only 인지 아닌지 확인 (https://www.ilsos.gov/facilities/facilitylist)
  2. 온라인으로 스케쥴을 잡는다.
    아래 링크로 가서 Make a Secretary of State Facility Appointment 버튼 클릭한후, License and ID Card Services 버튼을 클릭한다.
    (make an appointment)

  3. 당일 서비스를 받으려면 Today DL-ID Appointments 를 클릭하고, 오늘이 아닌 날자를 선택하려면 Advance DL-ID Appointments 를 클릭한다. (오늘이 아닌경우 각 DMV 사무소마다 보이는 날자가 다르다. 당일 서비스는 매우 한가하여 미리 예약보다는 당일 예약으로 진행하는 것을 추천한다.)
  4. 클릭하게 되면 예약시간은 10분 단위로 설정이 되어있고 원하는 시간을 선택한다.
  5. 시간을 선택한후 Next 버튼을 클릭하면 정보 입력 폼이 나오는데 이름과, 이메일, 전화번호만 넣으면 예약이 끝나고 컨펌 이메일을 받게 된다.
  6. 나의 경우 8월 12일 당일 예약으로 하고 직접 방문하여 실제 소요시간은 10분 정도 걸렸으며, 신청뒤 지금의 아이디는 펀치로 구멍을 내어 돌려받고, 새로운 리얼 아이디는 프린트로 받으먀, 실물인 리얼 아이디는 우편으로 12일 뒤인 8월 24일 수령하였다.

8/12/2022 온라인으로 당일 예약 / 방문 10분만에 완료(사진 새로찍음)
8/24/2022 우편으로 새 리얼아이디 수령

미국에서 Global Entry 연장하기 – 2022년 8월 업데이트

글로벌 앤트리 (GE)를 5년 가까이 사용하면서 미국에서 한국이나 다른 나라를 공항으로 입국하면서 편리함을 체험해 보지 않고는 진즉에 해서 갖고 있을걸 하는 생각을 안하는 사람들은 없을 것이다.  미국 시민권자이지만 매번 한국에서 입국시 입국심사의 줄을 실제로 보기전에는 정말로 짜증나는 현상일 수밖에 없다.

거기에다 입국심사시 심사관들이 쓸데없이 던지는 질문에 답하기도 귀찮기도 하고 오랜 여행으로 지친 심신을 더 지치게 만들기 때문이다. 하지만 글로벌앤트리로(GE) 무인여권체크기계에 1-2분 정도의 시간만 보내면 바로 짐 찿는데까지 무사 안착을 하게 되기에 모두에게 권장한다.

그렇게 5년을 사용하다 보니 아래의 내용의 이메일이 왔다.

연장신청이메일
연장신청이메일

 

위에 보이는 이메일 내용과 같이 http://ttp.dhs.gov 로 로그인 하면 바로 연장할 수 있도록 쉽게 보여준다. 본인의 개인 정보와 여권, 그리고 PASSID, 즉 글로벌 앤트리(GE)의 ID를 넣어주고 다시 확인하면 $100의 연장비용만 크레딧 카드로 페이하면 된다. 

그리고 본인의 경우는 하루뒤에 바로 아래의 내용과 같이 승인 이메일이 바로 왔다. 조만간에 업데이트된  글로벌앤트리(GE) 카드를 새롭게 받지 않을까 생각한다.

 

글로벌앤트리 승인이메일
글로벌앤트리 승인이메일

덧붙여, 미국내 일부 크레딧카드 베네핏중에서 글로벌엔트리 신청비 $100을 크레딧으로 돌려주는 카드가 있다.

그중 하나가 아멕스 플레티넘 카드인데 연회비가 일년에 $550 이지만 매 4년마다 $100의 글로벌엔트리 혹은 $85의 TSA Pre 신청비를 크레딧으로 받는다.

체이스 카드에서는 사파이어 리져브 카드가 있다. 이 카드도 4년에 한번씩 글로벌엔트리나 TSA Pre 신청비용을 크레딧으로 돌려받는다.

글로벌엔트리는 신청시 5년의 유효기간으로 받게 되는데 그 기준이 본인의 생일이 되므로 되도록이면 생일이 지나고 나서 신청하는것을 권한다. 만일 생일이 한두달 남은 시점이라면 유효기간은 4년과 두달, 즉 50개월뒤가 만기가 되는것이다. 생일이 지나고 바로 신청하면 꽉찬 5년을 받게된다.


가족중 한명이 2022년 7월에 만기되는 글로벌엔트리 연장을 알려주는 이메일을 받았다. 이후 이메일 링크(http://ttp.dhs.gov) 를 클릭하여 새로운 어카운트를 만들고(5년전 신청했던 아이디와 암호는 사용못함, 새로 신청) $100을 크레딧카드로 지불한뒤 크레딧 체크를 위한 개인 신상 정보를 업데이트하고 신청을 하니 이틀뒤에 승인 이메일을 받았다.

그리고, 아멕스 플래티넘 메인 홀더 카드로는 위의 프로세스로 본인이 사용하였고, 이번엔 연회비가 없는 가족카드 즉 골드카드로 지불하였는데 몇일뒤에 $100의 크레딧을 아멕스로부터 받았다. 이 카드는 5년전 처음 신청했던 카드와 같다. 하지만 그당시에는 가족카드로 3명이 $175 을 지불하였고 이번엔 같은 넘버의 카드지만 연회비가 없는 골드카드였다. 아래는 이번 신청에 관한 타임라인을 적어보았다.


1/25/2022 – 만료 6개월전에 GE 연장하라는 내용의 이메일을 받음 (제목은 Program Expiry)

2/3/2022 – 이메일 링크를 통해 들어가 새로운 어카운트를 만들고, 개인신상 정보 업뎃을 하고 신청완료 (아멕스 플래티넘 연회비 없는 가족카드로 신청료 $100 지불)

2/5/2022 – 승인 이메일 받음 (제목은 TTP Application Status Change)

2/9/2022 – 아멕스 플래티넘 크레딧 받음 ($100 돌려받음)

2/12/2022 – 우편으로 연장된 유효기간이 찍힌 Program Expiry 카드 수령

온라인으로 글로벌엔트리 신청에서 카드수령까지 총 9일이 걸림


7/12/2022 – 2023년 1월에 만기되는 가족이 GE 연장하라는 이메일을 받음 (제목은 Program Expiry)

8/15/2022 – 이메일 링크를 통해 들어가 새로운 어카운트를 만들고, 개인신상 정보 업뎃을 하고 신청완료 (아멕스 플래티넘 연회비 없는 가족카드로 신청료 $100 지불)

카드 수령시 다시 업데이트 하겠습니다.

8/16/2022 – 승인 이메일 받음 (제목은 TTP Application Status Change)

미국에서 Zelle 로 쉽게 돈을 주고 받기 – 개인 혹은 비지니스 모두 가능

미국에서 대학생들이나 직장인들 사이에서 Venmo 를 이용해 돈을 쉽게 주고받고 첵킹어카운트를 연결하여 펀드를 옮겨 사용한지도 한참되었다. 스마트폰의 대중화로 벤모앱은 개인간의 물품교환에도 많이 사용되지만 첵킹계좌를 연결하지 않고 크레딧카드를 연결해놓으면 수수료가 나간다.

나의 경우 벤모앱이 보안상 취약한 점이 있어 해킹된 사례를 많이 접했기에 사용량이 점점 줄어들게 되었다.

최근 몇년전부터는 Zelle 가 새롭게 등장해 은행 어카운트에서 바로 셋팅이 가능하며 이름, 전화번호 혹은 이메일, 이 두가지 정보만 알고있으면 개인 혹은 비지니스 이체까지 쉽게 이용이 가능하기에 현재 가장 편하게 사용하는 현금거래 수단이 되었다.

주변에 보면 젤르 사용에 있어 실수를 많이 하는 경우를 보았기에 몇가지 팁을 전하고자 한다.

  1. Zelle 는 모든 은행에서 제공하는 서비스는 아니다. 본인이 사용하는 은행에서 서비스를 하지 않으면 젤르 서비스가 가능한 다른 은행에 계좌를 오픈해야한다. Zelle 는 첵킹뿐만 아니라 세이빙 계좌에서도 사용 가능하다.
     

  2. 젤르 셋팅할때 전화번호를 사용할지 이메일을 사용할지 둘중 하나만 정하면 된다. 만일 두개 은행에서 각각의 젤르를 사용하고자 한다면 각각 다른 전화번호 혹은 이메일을 지정하면 된다.
     
    실수로 같은 정보를 넣게되면 먼저 젤르가 셋업된 은행에서는 서비스가 불가능해진다. 제일 처음 젤르셋팅시 전화번호를 사용했다면 그다음 은행에서의 젤르 셋팅에선 이메일을 사용하기 바란다.

  3. 이미 사용중인 젤르에서 정보를 새롭게 업데이트 할경우, 즉 전화번호를 바꾸거나 이메일을 바꾸게 되면 바로 이체가 불가능하다.
     
    일반적으로 정보를 수정한뒤 한달의 유예기간이 지난후에야 젤르 사용이 가능하니 이점은 꼭 알고 업데이트를 하는것이 좋다.

삼성 갤럭시 워치4 프리오더가 드디어 시작되었습니다.

삼성 공식 홈페이지를 통해서 갤럭시 워치3 LTE 버젼을 구입한지도 몇달이 지났다. 삼성 갤럭시 시리즈 폰이 아닌 애플 아이폰으로 블루투스 연결하여 사용하고 있는데 전화나 텍스트, 이메일, 그리고 카카오톡 등에서 알림을 받는데 전혀 문제없이 잘 사용하고 있는 중이다.

몇달동안 갤럭시 워치3가 세일로 코스코나 샘스, 베스트바이 등에서 자주 풀리곤 하였는데 이제 드디어 갤럭시 워치4가 공개되고 프리 오더가 시작되었다.

갤럭시 워치4에서 가장 큰 변화는 단연 운영체제이다. 이전까진 삼성 타이젠이었지만 이번엔 Wear OS 로 바뀌었다. 건강이나 피트니스 관련 기능들도 대폭 개선되었다고 하는데 기존 한국에선 가능했던 전기심박센서(ECG) 기능이 미국에선 불가능했는데 과연 이제 미국에서도 가능하게 되는지 기대가 크다.

아이폰을 계속 사용중이지만 애플워치 디자인보다는 갤럭시 워치 시리즈를 더 마음에 들어 사용중이라 갤럭시 워치 시리즈의 변화에 더 관심이 가는게 사실이다. 애플워치도 처음 출시된 모델에서부터 비교해보면 외형상의 변화가 거의 없는것이나 마찬가지이다. 모서리의 변화만 주었을뿐 밴드도 그대로 사용 가능하기도 하고, 이젠 원형의 애플워치를 기대해본다.

이번에 공개된 갤럭시 워치4의 사양은 아래와 같다.

  1. 메모리 : 1.5GB+ / 16GB 내장 메모리
  2. 베터리 : 247mAh / 361mAh
  3. 운영체제 : Wear OS, Powered by Samsung
  4. 센서 : 삼성 바이오액티브 센서(광학심박센서 + 전기심박센서 + 생체전기임피던스분석센서), 가속도 센서, 기압 센서, 자이로 센서, 지자기 센서, 조도 센서
  5. AP : 엑시노스 W920 듀얼 코어 / 1.18HHz(5나노 프로세서)

애플워치의 경우 아이폰만 연결이 가능하지만 갤럭시 워치나 기타 다른 스마트 워치 핏빗(Versa 시리즈, Charge 시리즈 등), Garmin 등은 아이폰과 안드로이드 폰 모두에서 작동한다. 다음 스마트 워치를 구입한다면 좀더 나은 베터리 수명과 건강, 피트니스 기능을 비교해서 선택할 것이다.

삼성 공식 홈페이지 갤럭시 워치4 구매 링크 : https://www.samsung.com/us/mobile/wearables/smartwatches/?product_types=Smartwatches&flagship_series=Galaxy+Watch4

베스트바이 갤럭시 워치4 프리오더 링크 : https://www.bestbuy.com/site/searchpage.jsp?_dyncharset=UTF-8&browsedCategory=pcmcat1496260428559&id=pcat17071&iht=n&ks=960&list=y&qp=modelfamily_facet%3DModel%20Family~Galaxy%20Watch4&sc=Global&st=pcmcat1496260428559_categoryid%24pcmcat321000050003&type=page&usc=All%20Categories

버라이존 갤럭시 워치 링크 : 프로모션 있네요. 온라인으로 삼성 워치를 구입하면 스마트폰 구입시 150불 할인입니다. (Buy the Samsung Galaxy Watch device and get $150 off a Smartphone. Online only.)
https://www.verizon.com/connected-smartwatches/samsung/

Sendgrid Java API (샌드그리드 자바 API)로 메일 보내기

샌드그리드를 사용하여 예전부터 이메일을 보내고 있었는데 최근들어 예전 API가 이메일을 발송하지 않아 아무래도 문제가 있는것 같아 새로운 API로 바꾸게 되었다.

사용자 입장에서는 모든게  다 바뀌었고 5-6년전부터 쓰던 API는 하나도 같은게 없었다.  아래의 내용은 샘플과 함께 문제점이 있던것을 고친 내용들이다.

  •  java API jar file download : https://github.com/sendgrid/sendgrid-java/releases/download/4.7.2/sendgrid-java.jar
  •  위의 jar file 만 따로 받아서 사용하면 되는데 그렇게 하면   아래의  error가   런타임에 생긴다.
  • java.lang.SecurityException: Invalid signature file digest for Manifest main attributes    .
  •  이럴때는 가장 쉬운 방법으로는    각종 zip 관련  도구로 META-INT folder 로들어가서  *SF,*.DSF,*RSA 파일들을 모두 지우고 jar 파일을 세이브하면 된다. 아니면 https://github.com/sendgrid/sendgrid-java 에서 코드를 다운받아서  jar 파일을 빌드할때  사이닝 관련된 파일들을 아래와 같이 제외 시킨다.

Maven:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.6</version>
    <executions>
        <execution>
            <id>unpack-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>unpack-dependencies</goal>
            </goals>
            <configuration>
                <excludeScope>system</excludeScope>
                <excludes>META-INF/*.SF</excludes>
                <excludes>META-INF/*.DSA</excludes>
                <excludes>META-INF/*.RSA</excludes>
                <excludeGroupIds>junit,org.mockito,org.hamcrest</excludeGroupIds>
                <outputDirectory>${project.build.directory}/classes</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

ANT:

  1. <jar destfile="app.jar" basedir="${classes.dir}">
    <zipfileset excludes="META-INF/**/*" src="${lib.dir}/bcprov-jdk16-145.jar"></zipfileset>
    <manifest>
    <attribute name="Main-Class" value="app.Main"/>
    </manifest>
    </jar>

    다음은 간단한 샘플 코드들이이다. Personalization을 사용하여 여러 사람들한테 보내거나 BCC등 예전과는 많이 다른 모습을 보인다. 물론 기본적으로 디렉트 API 에서 웹서비스 API로 바뀐게 확연히 들어난다. 

  2. import com.sendgrid.Method;
    import com.sendgrid.Request;
    import com.sendgrid.Response;
    import com.sendgrid.SendGrid;
    import com.sendgrid.helpers.mail.Mail;
    import com.sendgrid.helpers.mail.objects.*;
    import java.io.IOException;
    public class Example {
    // Fully populated Mail object
    public static Mail buildKitchenSink() {
    Mail mail = new Mail();
    Email fromEmail = new Email();
    fromEmail.setName(Example User);
    fromEmail.setEmail(test@example.com);
    mail.setFrom(fromEmail);
    mail.setSubject(Hello World from the Twilio SendGrid Java Library);
    Personalization personalization = new Personalization();
    Email to = new Email();
    to.setName(Example User);
    to.setEmail(test1@example.com);
    personalization.addTo(to);
    to.setName(Example User);
    to.setEmail(test2@example.com);
    personalization.addTo(to);
    Email cc = new Email();
    cc.setName(Example User);
    cc.setEmail(test3@example.com);
    personalization.addCc(cc);
    cc.setName(Example User);
    cc.setEmail(test4@example.com);
    personalization.addCc(cc);
    Email bcc = new Email();
    bcc.setName(Example User);
    bcc.setEmail(test5@example.com);
    personalization.addBcc(bcc);
    bcc.setName(Example User);
    bcc.setEmail(test6@example.com);
    personalization.addBcc(bcc);
    personalization.setSubject(Hello World from the Personalized Twilio SendGrid Java Library);
    personalization.addHeader(X-Test, test);
    personalization.addHeader(X-Mock, true);
    personalization.addSubstitution(%name%, Example User);
    personalization.addSubstitution(%city%, Riverside);
    personalization.addCustomArg(user_id, 343);
    personalization.addCustomArg(type, marketing);
    personalization.setSendAt(1443636843);
    mail.addPersonalization(personalization);
    Personalization personalization2 = new Personalization();
    Email to2 = new Email();
    to2.setName(Example User);
    to2.setEmail(test1@example.com);
    personalization2.addTo(to2);
    to2.setName(Example User);
    to2.setEmail(test2@example.com);
    personalization2.addTo(to2);
    Email cc2 = new Email();
    cc2.setName(Example User);
    cc2.setEmail(test3@example.com);
    personalization2.addCc(cc2);
    cc2.setName(Example User);
    cc2.setEmail(test4@example.com);
    personalization2.addCc(cc2);
    Email bcc2 = new Email();
    bcc2.setName(Example User);
    bcc2.setEmail(test5@example.com);
    personalization2.addBcc(bcc2);
    bcc2.setName(Example User);
    bcc2.setEmail(test6@example.com);
    personalization2.addBcc(bcc2);
    personalization2.setSubject(Hello World from the Personalized Twilio SendGrid Java Library);
    personalization2.addHeader(X-Test, test);
    personalization2.addHeader(X-Mock, true);
    personalization2.addSubstitution(%name%, Example User);
    personalization2.addSubstitution(%city%, Denver);
    personalization2.addCustomArg(user_id, 343);
    personalization2.addCustomArg(type, marketing);
    personalization2.setSendAt(1443636843);
    mail.addPersonalization(personalization2);
    Content content = new Content();
    content.setType(text/plain);
    content.setValue(some text here);
    mail.addContent(content);
    content.setType(text/html);
    content.setValue(<html><body>some text here</body></html>);
    mail.addContent(content);
    Attachments attachments = new Attachments();
    attachments.setContent(TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12);
    attachments.setType(application/pdf);
    attachments.setFilename(balance_001.pdf);
    attachments.setDisposition(attachment);
    attachments.setContentId(Balance Sheet);
    mail.addAttachments(attachments);
    Attachments attachments2 = new Attachments();
    attachments2.setContent(BwdW);
    attachments2.setType(image/png);
    attachments2.setFilename(banner.png);
    attachments2.setDisposition(inline);
    attachments2.setContentId(Banner);
    mail.addAttachments(attachments2);
    mail.setTemplateId(13b8f94f-bcae-4ec6-b752-70d6cb59f932);
    mail.addSection(%section1%, Substitution Text for Section 1);
    mail.addSection(%section2%, Substitution Text for Section 2);
    mail.addHeader(X-Test1, 1);
    mail.addHeader(X-Test2, 2);
    mail.addCategory(May);
    mail.addCategory(2016);
    mail.addCustomArg(campaign, welcome);
    mail.addCustomArg(weekday, morning);
    mail.setSendAt(1443636842);
    ASM asm = new ASM();
    asm.setGroupId(99);
    asm.setGroupsToDisplay(new int[]{4, 5, 6, 7, 8});
    mail.setASM(asm);
    // This must be a valid [batch ID](https://sendgrid.com/docs/API_Reference/SMTP_API/scheduling_parameters.html) to work
    // mail.setBatchId(“sendgrid_batch_id”);
    mail.setIpPoolId(23);
    MailSettings mailSettings = new MailSettings();
    BccSettings bccSettings = new BccSettings();
    bccSettings.setEnable(true);
    bccSettings.setEmail(test@example.com);
    mailSettings.setBccSettings(bccSettings);
    Setting sandBoxMode = new Setting();
    sandBoxMode.setEnable(true);
    mailSettings.setSandboxMode(sandBoxMode);
    Setting bypassListManagement = new Setting();
    bypassListManagement.setEnable(true);
    mailSettings.setBypassListManagement(bypassListManagement);
    FooterSetting footerSetting = new FooterSetting();
    footerSetting.setEnable(true);
    footerSetting.setText(Footer Text);
    footerSetting.setHtml(<html><body>Footer Text</body></html>);
    mailSettings.setFooterSetting(footerSetting);
    SpamCheckSetting spamCheckSetting = new SpamCheckSetting();
    spamCheckSetting.setEnable(true);
    spamCheckSetting.setSpamThreshold(1);
    spamCheckSetting.setPostToUrl(https://spamcatcher.sendgrid.com);
    mailSettings.setSpamCheckSetting(spamCheckSetting);
    mail.setMailSettings(mailSettings);
    TrackingSettings trackingSettings = new TrackingSettings();
    ClickTrackingSetting clickTrackingSetting = new ClickTrackingSetting();
    clickTrackingSetting.setEnable(true);
    clickTrackingSetting.setEnableText(true);
    trackingSettings.setClickTrackingSetting(clickTrackingSetting);
    OpenTrackingSetting openTrackingSetting = new OpenTrackingSetting();
    openTrackingSetting.setEnable(true);
    openTrackingSetting.setSubstitutionTag(Optional tag to replace with the open image in the body of the message);
    trackingSettings.setOpenTrackingSetting(openTrackingSetting);
    SubscriptionTrackingSetting subscriptionTrackingSetting = new SubscriptionTrackingSetting();
    subscriptionTrackingSetting.setEnable(true);
    subscriptionTrackingSetting.setText(text to insert into the text/plain portion of the message);
    subscriptionTrackingSetting.setHtml(<html><body>html to insert into the text/html portion of the message</body></html>);
    subscriptionTrackingSetting.setSubstitutionTag(Optional tag to replace with the open image in the body of the message);
    trackingSettings.setSubscriptionTrackingSetting(subscriptionTrackingSetting);
    GoogleAnalyticsSetting googleAnalyticsSetting = new GoogleAnalyticsSetting();
    googleAnalyticsSetting.setEnable(true);
    googleAnalyticsSetting.setCampaignSource(some source);
    googleAnalyticsSetting.setCampaignTerm(some term);
    googleAnalyticsSetting.setCampaignContent(some content);
    googleAnalyticsSetting.setCampaignName(some name);
    googleAnalyticsSetting.setCampaignMedium(some medium);
    trackingSettings.setGoogleAnalyticsSetting(googleAnalyticsSetting);
    mail.setTrackingSettings(trackingSettings);
    Email replyTo = new Email();
    replyTo.setName(Example User);
    replyTo.setEmail(test@example.com);
    mail.setReplyTo(replyTo);
    return mail;
    }
    // API V3 Dynamic Template implementation
    public static Mail buildDynamicTemplate() {
    Mail mail = new Mail();
    Email fromEmail = new Email();
    fromEmail.setName(Example User);
    fromEmail.setEmail(test@example.com);
    mail.setFrom(fromEmail);
    mail.setTemplateId(d-c6dcf1f72bdd4beeb15a9aa6c72fcd2c);
    Personalization personalization = new Personalization();
    personalization.addDynamicTemplateData(name, Example User);
    personalization.addDynamicTemplateData(city, Denver);
    personalization.addTo(new Email(test@example.com));
    mail.addPersonalization(personalization);
    return mail;
    }
    // Minimum required to send an email
    public static Mail buildHelloEmail() {
    Email from = new Email(test@example.com);
    String subject = Hello World from the Twilio SendGrid Java Library;
    Email to = new Email(test@example.com);
    Content content = new Content(text/plain, some text here);
    // Note that when you use this constructor an initial personalization object
    // is created for you. It can be accessed via
    // mail.personalization.get(0) as it is a List object
    Mail mail = new Mail(from, subject, to, content);
    Email email = new Email(test2@example.com);
    mail.personalization.get(0).addTo(email);
    return mail;
    }
    public static void baselineExample() throws IOException {
    final Mail helloWorld = buildHelloEmail();
    send(helloWorld);
    }
    public static void kitchenSinkExample() throws IOException {
    final Mail kitchenSink = buildKitchenSink();
    send(kitchenSink);
    }
    public static void dynamicTemplateExample() throws IOException {
    final Mail dynamicTemplate = buildDynamicTemplate();
    send(dynamicTemplate);
    }
    private static void send(final Mail mail) throws IOException {
    final SendGrid sg = new SendGrid(System.getenv(SENDGRID_API_KEY));
    sg.addRequestHeader(X-Mock, true);
    final Request request = new Request();
    request.setMethod(Method.POST);
    request.setEndpoint(mail/send);
    request.setBody(mail.build());
    final Response response = sg.api(request);
    System.out.println(response.getStatusCode());
    System.out.println(response.getBody());
    System.out.println(response.getHeaders());
    }
    public static void main(String[] args) throws IOException {
    baselineExample();
    kitchenSinkExample();
    dynamicTemplateExample();
    }
    }
error: Content is protected !!