91³Ô¹ÏÍø

Watch CBS News

Texts show Rep. Tony Gonzales sent explicit messages to staffer who later died by suicide: "This is going too far boss"

A newly revealed 2024 text exchange appears to show that Rep. Tony Gonzales encouraged one of his aides to send him an explicit photo — leading the aide, Regina Santos-Aviles, to push back. Just over a year later, the staffer died after setting herself on fire.

The texts have drawn additional scrutiny to the Texas Republican, who is now facing bipartisan criticism over his alleged affair with Santos-Aviles. An attorney for the staffer's husband alleged to CBS News last week that Gonzales coerced Santos-Aviles into a sexual relationship. Gonzales has in the past, and has claimed he is being extorted.

CBS News has obtained a set of texts that were extracted from Santos-Aviles' phone that show a conversation between Gonzales and the late staffer.

In the exchange, which took place after midnight in early May 2024, Gonzales asked for a "sexy pic." After a back-and-forth, Santos-Aviles said she didn't like taking photos of herself. He responded in a pair of texts: "I'm just such a visual person" and "Sorry."

The congressman then asked Santos-Aviles what her "favorite position" is. She asked him to answer first, and he did.

The aide then texted: "This is going too far boss. So how long have you thought I was this hot?"

After another back-and-forth, Santos-Aviles said again: "This is too far, Tony."

Santos-Aviles later said to Gonzales: "Please tell me you didn't just hire me because I was hot."

"No way," Gonzales writes.

Several weeks after that exchange, Santos-Aviles' husband, Adrian Aviles, learned about their alleged relationship, he previously told the .

Then, the following month, Aviles appeared to send a text from Santos-Aviles' phone to Gonzales and several other staffers in his office. In that message, he wrote that he'd discovered "she's been having an affair on me with your boss Tony Gonzales for some time now."

Aviles' lawyer, Bobby Barrera, told CBS News last week that Santos-Aviles' mental health declined sharply following the end of her alleged relationship with Gonzales — something he blamed on the congressman's conduct.

Santos-Aviles died in September 2025 after she was found critically burned near her home in Uvalde, Texas, according to the local police department. The Bexar County Medical Examiner ruled the death a suicide, according to .

The circumstances leading up to her suicide are not clear.

In an interview with CBS News on Monday, Aviles said he wants to rebut Gonzales' denials of the affair and to demonstrate that "this is not something that's been fabricated."

"You ended a family because of your predatorial instincts," said Aviles, who has an 8-year-old son with Santos-Aviles.

The new details about Gonzales' alleged relationship are coming to light as the congressman fights for reelection. His district along the U.S.-Mexico border is considered a safe GOP seat, but Gonzales is facing a primary challenge next week from gun rights activist Brandon Herrera, who lost to Gonzales by fewer than 400 votes in 2024. President Trump has endorsed Gonzales. Herrera to step down last week.

A handful of congressional Republicans criticized Gonzales after the emerged on Monday. 

Rep. Lauren Boebert of Colorado urged Gonzales to resign and that House Republicans' campaign arm should start financially supporting Herrera. Rep. Nancy Mace of South Carolina also said Monday that Gonzales should resign, "deeply disturbing" and an "abuse of power." And former Rep. Marjorie Taylor Greene of Georgia "shocking and disgusting."

Herrera also from Republican Rep. Chip Roy of Texas and the , a political action committee aligned with members of the hard-right House Freedom Caucus. Neither endorsement mentioned Gonzales.

House Speaker Mike Johnson told reporters Monday that the allegations against Gonzales are "very serious," but he said "you have to allow investigations to play out."

Asked about the allegations Tuesday, Gonzales said he will not resign, telling reporters: "There will be an opportunity for all the details and the facts to come out. What you've seen are not all the facts."

Gonzales denied having an affair in November, saying in a that the "rumors are completely untruthful."

The congressman also accused Barrera of trying to blackmail him last week. He shared on X a screenshot of a letter from Barrera in which the lawyer appears to propose a $300,000 legal settlement with a non-disclosure agreement.

"Disgusting to see people profit politically and financially off a tragic death," Gonzales wrote.

Barrera denied that allegation, claiming to CBS News last week that it was actually a standard confidential settlement letter sent to the congressman's attorney. 

Aviles told CBS News, "This is not a ploy for money."

CBS News has reached out to Gonzales' office for comment.

Juliegrace Brufke and Anne Bryson contributed to this report.


If you or someone you know is in emotional distress or a suicidal crisis, you can reach the  by calling or texting 988. You can also . For more information about mental health care resources and support, The National Alliance on Mental Illness (NAMI) HelpLine can be reached Monday through Friday, 10 a.m.–10 p.m. Eastern Time at 1-800-950-NAMI (6264) or email info@nami.org.

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=296763317a51cab90faa73f1bb146d5c'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });